r - 按组区分采样率

标签 r group-by dplyr sampling

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

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,则会出现大小错误。我想过“手动”进行分割和差异化采样,然后再次绑定(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/

相关文章:

r - RStudio presentations/slidify/pandoc 中的两列布局

r - 为什么调用指定命名空间的函数会更慢?

sql - 按特定条件分组 - SQL

r - 使用 purrr 将映射函数应用于分组数据框

r - 循环计算权重并创建新变量

r 排除带有关键词的句子

R 函数查看多个向量的组合是否与目标向量匹配

mysql - 如何将 GROUP_CONCAT 添加到 LEFT JOIN 查询?

r - 导入多个 csv 文件并为每个文件添加年份

r - 一起使用 recode 和 case_when