R:从组中随机抽取

时间:2017-07-17 17:21:26

标签: r

我不确定标题是否清楚,但我有一个数据框,有1000个家庭观察,其中一些有一个成员,有些有两个成员。我需要将数据帧划分为两个大小相等的数据帧,而来自同一家庭的个人不会放在同一个子集中。

数据框在功能上看起来像这样。

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 个答案:

答案 0 :(得分: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")采样,其中&#34; T&#34;代表治疗和&#34; C&#34;控制。这将确保您的家庭成员将在不同群体之间进行划分,并确保所得到的样本量与预期相同。在这里,相同的样本量实际上是合理的。

table(df$groups)
C T 
6 6 

答案 1 :(得分:0)

这可能不会创建相等的集合,但会随机创建组成员资格:

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