You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言分组数据框按比例抽样问题:如何按组抽取约33%行?

R语言分组按比例随机抽样解决方案

原始数据

df <- data.frame(
  Story = c(rep("C", 6), rep("X", 9), rep("A", 15), rep("B",12))
)

需求

对每个Story分组随机抽取约33%的行,预期抽样量:

  • 2个"C"(6×0.33≈1.98,向上取整为2)
  • 3个"X"(9×0.33≈2.97,向上取整为3)
  • 5个"A"(15×0.33≈4.95,向上取整为5)
  • 4个"B"(12×0.33≈3.96,向上取整为4)

原代码问题

原代码中额外的mutate步骤属于冗余操作,无需生成ID和sample_size字段,直接在抽样步骤中计算每组样本量即可。

修正后的代码

library(dplyr)

df %>%
  group_by(Story) %>%
  slice_sample(n = ceiling(n() * 0.33)) %>%
  ungroup()

代码说明

  • group_by(Story):按Story字段对数据分组
  • slice_sample(n = ceiling(n() * 0.33)):分组后n()代表当前组的总行数,通过ceiling(n()*0.33)计算向上取整后的抽样行数,直接传递给slice_sample完成随机抽样
  • ungroup():取消分组(可根据后续操作需求选择是否保留分组状态)

运行上述代码即可得到符合预期的抽样结果。

内容的提问来源于stack exchange,提问作者Chris Ruehlemann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:27:25