如何在R中按组随机抽样并保留组内全部观测值?
解决随机抽取完整组的问题
你需要的是随机抽取整个分组而非组内部分行,之前的代码是对每个组单独抽样,所以不符合需求。以下是两种可行的实现方式:
使用dplyr实现
先给数据添加分组标识,再随机选中目标数量的组,最后筛选出这些组的所有观测值:
library(dplyr) mtcars %>% mutate(number = rep(1:8, each=4)) %>% filter(number %in% sample(unique(number), 2))
这段代码会先生成8个每组4行的分组,随机挑选2个组,最终输出这2个组的全部8条数据,完美匹配你的需求。
使用Base R实现
如果不想依赖dplyr,用基础R代码也能完成:
# 给mtcars添加分组列 mtcars$number <- rep(1:8, each=4) # 随机抽取2个唯一的组编号 selected_groups <- sample(unique(mtcars$number), 2) # 筛选出选中组的所有数据 sampled_df <- mtcars[mtcars$number %in% selected_groups, ]
两种方式的核心逻辑都是:先确定要保留的组,再提取这些组的全部条目,这样就能在缩小数据集的同时,完整保留每个购物篮(分组)的所有数据。
内容的提问来源于stack exchange,提问作者hachiko
相关产品推荐
相关产品推荐

