【发布时间】:2017-06-13 02:54:13
【问题描述】:
我从原始数据框中随机抽取参与者,然后我想创建新的数据框,排除一个样本并保留其余样本(请注意,数据框要大得多,每个 id 有更多变量和更多观察结果)。
样本df:
id var1 var2
1 10 15
1 10 15
2 11 4
2 11 4
3 12 4
3 12 4
4 9 10
4 9 10
#randomly sample two sets of id
id <- as.numeric(as.character(df$id))
fold1 <- as.data.frame(sample(id, 2, replace=TRUE))
colnames(fold1) <- "id"
fold2 <- as.data.frame(sample(id, 2, replace=TRUE))
colnames(fold2) <- "id"
期望的输出
df.new1:
id var1 var2
2 11 4
2 11 4
3 12 4
3 12 4
df.new2:
id var1 var2
1 10 15
1 10 15
4 9 10
4 9 10
我尝试了一些类似的方法,但我的语法似乎存在一些问题,我不太明白。如果有 dplyr 实现,我会很高兴看到它。
list = c(fold1, fold2)
for(i in length(list)) {
df.new <- as.data.frame(df[!(df$id %in% list[i]$id), ])
assign(paste("df.new", i, sep="."), df.new)
}
**编辑:我稍微修改了示例以反映这样一个事实,即每次抽奖应采样 id 总数的一部分,并且采样的 id 总数应等于 df 中 id 的总数。因此,如果有 4 个 id,每次抽奖应该包含 2 个 id。
【问题讨论】:
-
dplyr具有方法sample_n(采样n 行)和sample_frac(采样一定比例的行)。他们有帮助吗? -
我尝试了
group_by(id)和sample_n,但它似乎不是基于随机抽取的id 进行抽样。但也许有一种方法可以指定它的绘制方式? -
您需要多少个这样的数据帧?所有可能的组合?也只是为了确认,您需要一次忽略一个
id? -
我需要绘制 id 的一部分(对不起,我的例子太短了)。因此,如果我有 60 个 id 并想要 5 次平局,我将在每个折叠中有 12 个 id 和 5 次折叠。