按组区分采样率
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_by
和 sample_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
对于机器学习模型训练,我正在尝试对具有分组变量的数据帧进行采样,以便使用不同的采样规则处理每个组。比如我的数据:
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
,我会收到大小错误。我想 "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