求助:在R中按Group列随机选取4条唯一分组的行
从分组数据中随机选取不重复分组的指定行数
需求说明
需要从包含分组(group列)的数据中随机选取4行,要求结果中每行来自不同的分组,即同一group不能出现多次。
原始数据
group col_2 col_3 col_4 A p_m 12 21 A q_x 11 21 A i_z 13 22 B q_z 11 24 B p_x 14 25 B i_m 15 26 B q_m 17 28 C p_x 16 29 C i_z 12 23 C q_m 14 23 C q_x 13 25 D p_z 11 25 D i_z 15 26 D q_m 17 28 D q_x 14 29 E p_x 13 30 E i_m 15 26 E q_m 17 28 E p_x 16 29 F i_z 12 23 F q_x 13 25 F p_z 11 25 F i_z 15 26 G q_m 17 28 G q_z 11 24 G p_x 14 25 G i_m 15 26 H q_x 11 21 H i_z 13 22 H q_z 11 24 H p_x 13 30
期望输出示例
group col_2 col_3 col_4 A i_z 13 22 H i_z 13 22 D q_m 17 28 F p_z 11 25
错误尝试分析
你之前的代码问题在于:
- 直接使用
sample_n(5)是从整个数据集随机抽取5行,无法保证分组不重复; sample_n(distinct(group), 5)和sample_n(unique(group), 5)的用法错误,sample_n的第一个参数是要抽取的行数,不能传入分组对象。
可行解决方案
下面提供两种基于dplyr的有效方法:
方法一:先按分组抽1行,再随机选指定数量的分组
library(dplyr) set.seed(1234) # 设置随机种子保证结果可复现 rndmData <- mydata %>% group_by(group) %>% sample_n(1) %>% # 每个分组随机抽取1行 ungroup() %>% sample_n(4) # 从所有分组的单行中随机选4个(即4个不同分组)
方法二:先随机选分组,再从每个选中分组抽1行
library(dplyr) set.seed(1234) # 先随机选取4个不重复的分组 selected_groups <- sample(unique(mydata$group), 4) # 过滤出选中分组的数据,再每个分组抽1行 rndmData <- mydata %>% filter(group %in% selected_groups) %>% group_by(group) %>% sample_n(1) %>% ungroup()
两种方法都能满足需求:结果包含4行,每行来自不同的group,且是随机选取的。
内容的提问来源于stack exchange,提问作者Ajrhjnd
相关产品推荐
相关产品推荐

