我不确定标题是否清楚,但我有一个数据框,有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相同,依此类推。谢谢!
答案 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))