2017-07-17 103 views
2

我不確定標題是否清晰,但我有一個數據框,有1000個觀察戶,其中一些有一個成員,其中一些有兩個成員。我需要將數據幀分成兩個相同大小的數據幀,而來自同一家庭的個人不要放在同一個子集中。R:隨機從組中抽取

dataframe在功能上看起來像這樣。

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 

同樣,我需要的數據和從家庭2人1的兩個子集不能在相同人2從家庭2,依此類推。謝謝!

回答

2

在基礎R,使用ave由家庭分裂,你可以做

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

對於每一個家庭,我取自c("T", "C"),其中「T」代表治療,「C」代表控制。這將確保您的家庭成員將在不同組別之間分配,並確保所得到的樣本量在預期上相同。在這裏,相同的樣本大小恰好在實際中得到了解決。

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

謝謝,這是一個非常優雅的解決方案! – dhrice

0

這可能不是創造平等套但不隨意創建組成員:

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