2017-10-09 4 views
-1

Je suis relativement nouveau à R. Maintenant, je suis coincé avec l'échantillonnage stratifié lorsque la taille de l'échantillon change en fonction du groupe.La taille de l'échantillonnage stratifié varie en fonction du groupe R

Les données ressemble à ceci:

enter image description here

Et la taille de l'échantillon varie en fonction de différents groupes ou strates:

enter image description here

je échantillonnage stratifié, mais ne peut pas la figure sur la taille de l'échantillon. Un message d'erreur indiquant que "la taille doit être saisie en tant que vecteur nommé" s'affiche. Quelqu'un pourrait-il aider? Je vous remercie.

+0

Que se produire lorsque vous supprimez les parenthèses après 'la population $ SampleSize'? – ANG

+1

ne pas publier d'images de vos données, ils ne sont pas utiles, car nous ne pouvons pas charger d'images. Lisez l'aide de ce site et [this] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) et éditez votre question. – shea

Répondre

0

Je suppose que vous utilisez stratified de mon paquet "splitstackshape".

L'erreur explique ce qui est requis: un vecteur nommé (quelque chose comme c(a = 5, b = 10), par exemple). Cependant, cette caractéristique de la fonction suppose qu'une seule variable est utilisée pour la stratification. Pour résoudre ce problème, vous pouvez simplement créer une nouvelle variable de regroupement en collant vos colonnes "Loc" et "Format".

Voici un exemple simple ....

Commencez avec quelques exemples de données de votre ensemble de données d'origine et un ensemble de données qui indique la taille des échantillons que vous voulez.

library(splitstackshape) 
set.seed(1) 
mydf <- data.table(strata1 = sample(letters[1:2], 25, TRUE), 
        strata2 = sample(c("A", "B"), 25, TRUE), 
        values = sample(25, replace = TRUE)) 
head(mydf) 
# strata1 strata2 values 
# 1:  a  A  12 
# 2:  a  A  22 
# 3:  b  A  11 
# 4:  b  B  7 
# 5:  a  A  2 
# 6:  b  A  3 

wanted <- data.table(strata1 = c("a", "a", "b", "b"), 
        strata2 = c("A", "B", "A", "B"), 
        count = c(2, 3, 5, 2)) 
wanted 
# strata1 strata2 count 
# 1:  a  A  2 
# 2:  a  B  3 
# 3:  b  A  5 
# 4:  b  B  2 

Pour obtenir la sortie, nous allons ajouter une colonne appelée "KEY" combinant les deux colonnes de stratification. Vous pouvez le faire pour les deux ensembles de données, mais je l'ai simplement fait à la volée avec l'ensemble de données "voulu".

out <- stratified(
    mydf[, KEY := paste(strata1, strata2, sep = "_")], "KEY", 
    with(wanted, setNames(count, paste(strata1, strata2, sep = "_")))) 
out 
#  strata1 strata2 values KEY 
# 1:  a  A  21 a_A 
# 2:  a  A  2 a_A 
# 3:  a  B  9 a_B 
# 4:  a  B  3 a_B 
# 5:  a  B  9 a_B 
# 6:  b  A  17 b_A 
# 7:  b  A  12 b_A 
# 8:  b  A  3 b_A 
# 9:  b  A  17 b_A 
# 10:  b  A  13 b_A 
# 11:  b  B  8 b_B 
# 12:  b  B  20 b_B 

Comparer les tailles d'échantillons résultant par les variables de stratification d'origine:

out[, .N, .(strata1, strata2)] 
# strata1 strata2 N 
# 1:  a  A 2 
# 2:  a  B 3 
# 3:  b  A 5 
# 4:  b  B 2 
+0

Merci pour la solution. S'il-vous plait, soyez patient avec moi. J'ai un message d'erreur: Le nombre de groupes est de 1 mais le nombre de tailles fournies est 46. Je sais que mon "voulu" a 46 lignes, mais je ne comprends pas le nombre de groupes est 1 moyenne. La colonne "KEY" doit également contenir 46 valeurs uniques. –

+0

@HuayingPu, vous n'avez pas à tout faire en une seule étape. Brisez-le en plusieurs et voyez où est le problème. Vérifiez, par exemple, que la colonne "KEY" a effectivement le bon nombre de valeurs uniques. Votre dataset est un 'data.table', correct? – A5C1D2H2I1M1N2O1R2T1

+0

Je l'ai eu, enfin. Merci beaucoup! –