在R语言中按组查找字符串中的共同字符
在R语言中按组查找字符串共有的字符
我有一个名为df的数据框:
group string 1 1 Bc 2 1 EPc 3 1 Lkc 4 2 ABR 5 2 mA 6 2 Amt 7 3 Yrt 8 3 rtU 9 3 rti
我希望按group分组,找出每组内所有字符串都包含的共有字符。比如第1组的所有字符串都包含字符c,期望输出如下:
group similar 1 1 c 2 2 A 3 3 rt
df的dput代码:
df <- structure(list(group = c("1", "1", "1", "2", "2", "2", "3", "3", "3"), string = c("Bc", "EPc", "Lkc", "ABR", "mA", "Amt", "Yrt", "rtU", "rti")), class = "data.frame", row.names = c(NA, -9L))
解决方案
方法1:使用dplyr分组处理
结合dplyr的分组功能,搭配字符串拆分和交集计算实现需求:
library(dplyr) df %>% group_by(group) %>% summarise(similar = { # 将每个字符串拆分为单个字符的列表 char_lists <- strsplit(string, "") # 求分组内所有字符列表的交集 common_chars <- Reduce(intersect, char_lists) # 拼接交集字符为字符串 paste(common_chars, collapse = "") }) %>% ungroup()
运行后输出:
# A tibble: 3 × 2 group similar <chr> <chr> 1 1 c 2 2 A 3 3 rt
方法2:纯base R实现
无需加载额外包,用aggregate函数完成分组计算:
aggregate(string ~ group, data = df, FUN = function(x) { char_lists <- strsplit(x, "") common_chars <- Reduce(intersect, char_lists) paste(common_chars, collapse = "") })
该方法同样能得到与期望一致的结果。
内容的提问来源于stack exchange,提问作者Quinten
相关产品推荐
相关产品推荐

