2017-07-17 7 views
2

Ich bin mir nicht sicher, ob der Titel klar ist, aber ich habe einen Datenrahmen, der 1000 Beobachtungen von Haushalten hat, von denen einige ein Mitglied und einige von ihnen zwei Mitglieder haben. Ich muss den Datenrahmen in zwei gleich große Datenrahmen aufteilen, wobei die Personen aus demselben Haushalt nicht in derselben Untergruppe platziert werden.R: Nach dem Zufallsprinzip aus den Gruppen

Der Dataframe sieht funktional so aus.

household <- c(1,2,2,3,3,4,4,5,6,6,7,8) 
person <- c(1,1,2,1,2,1,2,1,1,2,1,1) 
df <- as.data.frame(cbind(household,person)) 
df 

Wieder muß ich zwei Teilmengen von Daten und Person 1 von Haushalt 2 kann nicht als Person 2 aus Haushalt 2, und so weiter in dem gleiches sein. Vielen Dank!

Antwort

2

In Basis R, ave von Haushalt zu teilen verwenden, können Sie

set.seed(1234) 
df$groups <- ave(df$household, df$household, FUN=function(x) sample(c("C", "T"), length(x))) 

Für jeden Haushalt tun, entnommen aus c("T", "C"), wobei "T" für Behandlung und "C" für Kontrolle steht. Dadurch wird sichergestellt, dass Ihre Haushaltsmitglieder in Gruppen aufgeteilt werden und dass die sich daraus ergebenden Stichprobengrößen erwartungsgemäß übereinstimmen. Hier ergeben sich tatsächlich gleiche Stichprobengrößen.

table(df$groups) 
C T 
6 6 
+0

Danke, das ist eine sehr elegante Lösung! – dhrice

0

Dies könnte nicht gleich Sätze erstellen, sondern tut Gruppenmitgliedschaften zufällig erstellen: Ich

require(dplyr) 
df %>% group_by(household) %>% 
mutate(member=sample(c("A","B"), length(household),replace=FALSE)) 
Verwandte Themen