不同组的抽样率

时间:2019-10-29 23:06:51

标签: r group-by dplyr sampling

对于机器学习模型培训,我正在尝试对具有分组变量的数据框进行采样,以便对每个组使用不同的采样规则。例如,我的数据:

df = data.frame(value = 1:10, label=c("a", "a", "b", rep("c", 7)))

对于大小小于3的小组,我希望不带整个小组,而对于较大的小组,我希望取样3而无需更换。

所以在这里,结果可能是:df[c(1:3, 6,9,10),]

如果我使用group_bysample_n,则会收到尺寸错误。我曾想过使用拆分和差异采样进行“手动”操作,然后再次绑定行,但是有没有更有效和直接的方法?

1 个答案:

答案 0 :(得分:2)

使用n()sample_n组的大小。

df %>% group_by(label) %>% sample_n(min(n(), 3))

# A tibble: 6 x 3
# Groups:   label [3]
#  value label     n
#  <int> <fct> <int>
#1     1 a         2
#2     2 a         2
#3     3 b         1
#4     5 c         7
#5    10 c         7
#6     4 c         7