按组区分的采样率

问题描述 投票:1回答:2

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

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,则会出现尺寸错误。我曾想过使用拆分和差异采样进行“手动”操作,然后再次绑定行,但是有没有更有效和直接的方法?

r group-by dplyr sampling
2个回答
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

如果不需要多余的列,可以在末尾添加%>% select(-n)


0
投票

在分组数据上,您可以使用runif()创建一个随机值,并保留按row_number()排序的这些值小于或等于3的情况。

df %>% 
  group_by(label) %>%
  filter(row_number(runif(n())) <= 3)
© www.soinside.com 2019 - 2024. All rights reserved.