对于机器学习模型培训,我正在尝试对具有分组变量的数据框进行采样,以便对每个组使用不同的采样规则。例如,我的数据:
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
,则会收到尺寸错误。我曾想过使用拆分和差异采样进行“手动”操作,然后再次绑定行,但是有没有更有效和直接的方法?
答案 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