R语言按分类变量各层级抽取固定样本量抽样问题求助
R分组抽样问题修复方案
错误原因
你当前代码的核心问题是分组变量选择错误:需求为按变量A的13个水平分别抽样,但代码中group_by()传入的是变量B,因此抽样逻辑完全不符合预期。
正确实现代码
场景1:每个A分类的原始样本量均≥30(无放回抽样)
# 按A分组,每组无放回抽30行,自动保留所有原有变量(包含B) result <- data %>% group_by(A) %>% sample_n(size = 30, replace = FALSE) %>% ungroup() # 可选,抽样完成后解除分组避免后续操作异常 # 如果最终只需要保留A、B两个变量,末尾加select(A, B)即可
场景2:部分A分类的原始样本量<30(需有放回抽样)
如果不开启有放回抽样,sample_n会直接报错,此时调整replace参数即可:
result <- data %>% group_by(A) %>% sample_n(size = 30, replace = TRUE) %>% ungroup()
补充说明
- dplyr 1.0.0之后更推荐使用
slice_sample()函数替代sample_n(),对应写法为slice_sample(n = 30, replace = FALSE),功能完全一致 - 抽样操作是按行提取,原始数据集的所有变量都会默认保留,不需要额外指定提取B变量
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

