如何从指定分类变量按固定占比抽样?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
相关产品推荐
相关产品推荐

