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

如何从指定分类变量按固定占比抽样?R语言dplyr实现方法问询

实现思路

你需要的是按固定比例分层抽样,可以先分别计算需要抽取的男性、女性样本量,再从对应性别的原始数据中单独抽样后合并即可,dplyr完全可以实现该需求。

实现代码

首先加载dplyr包,用slice_sample(dplyr 1.0.0及以上版本,旧版本可替换为sample_n)实现:

library(dplyr)

# 原始示例数据
data <- data.frame(patient_id = 1:1000,
                   sex = append(rep("male", 500),
                                rep("female", 500)))

# 自定义样本总量n
n <- 500
# 计算需要抽取的男/女人数,保证男性占比严格为65%
n_male <- round(n * 0.65)
n_female <- n - n_male

# 方法1:分别抽样后合并
sampled_data <- bind_rows(
  data %>% filter(sex == "male") %>% slice_sample(n = n_male),
  data %>% filter(sex == "female") %>% slice_sample(n = n_female)
)

# 方法2:分组抽样写法更简洁
sampled_data <- data %>%
  group_by(sex) %>%
  slice_sample(n = ifelse(sex == "male", n_male, n_female)) %>%
  ungroup()

# 验证比例
table(sampled_data$sex)

注意事项

  • 要保证原始数据中男性总数≥n_male、女性总数≥n_female,当前场景下样本总量n最多不能超过769(因为500/0.65≈769),否则无法凑出65%的男性占比。
  • 如果需要固定随机种子保证结果可复现,可以在抽样前加一行set.seed(自定义数字)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:06:04