【问题标题】:Differenciated sampling rate by group按组区分采样率
【发布时间】:2019-10-29 23:06:51
【问题描述】:

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

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

【问题讨论】:

  • 您愿意接受 data.table 解决方案吗?如果是这样,你可以做类似df[, if(.N <= 3) .SD else .SD[sample(3)], by=label] 我认为。
  • @thelatemail 我从未使用过它,但为什么不呢?但我的代码出错(未使用的参数 by=label)
  • @agenis - 你需要先安装/加载 data.table 包,然后通过setDT(df) 转换成data.table。该包扩展了标准 data.frames。
  • setDT 没问题,谢谢

标签: r group-by dplyr sampling


【解决方案1】:

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

【讨论】:

  • 哦,很好,使用按组和分钟计数
  • 另外,根本不需要额外的 mutate 步骤:sample_n(min(n(), 3))
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 2021-12-25
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多