2017-07-17 24 views
2

タイトルが明確であるかどうかは不明ですが、1000件の世帯があり、その中にはメンバーが1人あり、その中には2人のメンバーがいるデータフレームがあります。私は同じサブセットに置かれていない同じ家庭の人と一緒に2つの等しいサイズのデータ​​フレームにデータフレームを分割する必要があります。R:グループから無作為に抽出する

データフレームは機能的にはこのように見えます。

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つのデータのサブセットが必要であり、世帯2の人1は世帯2の人2と同じであることはできません。ありがとう!ベースRで

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

答えて

2

を、家庭で分割するaveを使用して、あなたは各家庭のために

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

を行うことができ、私は:これは、同じセットを作成していないかもしれないが、ランダムにグループメンバーシップを作成するん

+0

ありがとう、これは非常にエレガントなソリューションです! – dhrice

0

c("T", "C")からサンプリングした。ここで、「T」は処置を表し、「C」は対照を表す。これにより、世帯員がグループに分かれ、結果として得られるサンプルサイズが期待どおりになることが保証されます。ここでは、等しいサンプルサイズが実際にはうまくいくようになります。

table(df$groups) 
C T 
6 6 
関連する問題