按组区分采样率

Differenciated sampling rate by group

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

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,我会收到大小错误。我想 "manual" 进行拆分和差异化采样,然后再次绑定行,但是有没有更有效和直接的方法?

使用组的大小 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