对于机器学习模型训练,我尝试对具有分组变量的数据帧进行采样,以便每个组都使用不同的采样规则进行处理。例如我的数据:
df = data.frame(value = 1:10, label=c("a", "a", "b", rep("c", 7)))
对于规模小于 3 的群体,我想抽取整个群体,不再抽取更多,而对于更大的群体,我想抽取规模为 3 的样本而不进行替换。
所以这里的结果可能是:df[c(1:3, 6,9,10),]
如果我使用 group_by
和 sample_n
,则会出现大小错误。我想过“手动”进行分割和差异化采样,然后再次绑定(bind)行,但是有没有更有效和直接的方法?
最佳答案
使用sample_n
中组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
关于r - 按组区分采样率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58616591/