R语言按分组变量求组内列表元素交集的实现问题
首先导入所需依赖并构造数据集:
library(tidyverse) # 原始数据集构造 toy.dat <- data.frame(group = c(rep("A_0", 3), rep("A_1", 2), rep("B_0", 3) , rep("B_1", 3))) toy.dat$letters <- c("A", 'B', "C", "A", "D", "C", "E", "F", "A", "B", "F") # 你已完成的按group汇总步骤 summarised_df <- toy.dat %>% group_by(group) %>% summarise(letters = list(letters), num_elements = n()) %>% mutate(group_num = gsub(".*_", "", group))
接下来按group_num分组计算交集,直接新增列存储对应分组的公共字符:
result_df <- summarised_df %>% group_by(group_num) %>% mutate(common_letters = list(Reduce(intersect, letters)))
Reduce会把同一group_num下的所有letters字符向量依次传入intersect函数,最终得到所有向量的共同元素,即多个向量的交集。
如果需要每个group_num仅输出一行交集结果,可以改用summarise:
intersect_result <- summarised_df %>% group_by(group_num) %>% summarise(common_letters = list(Reduce(intersect, letters)))
结果说明
group_num = 0的交集结果为"C"group_num = 1的交集结果为"A"
和预期输出完全一致。
内容的提问来源于stack exchange,提问作者say.ff
相关产品推荐
相关产品推荐

