在R中识别数据框跨列重复字符并统计对应所属分组信息
R实现方案
核心处理逻辑
我们可以通过宽表转长表的方式统计每个字符串的出现分组信息,核心依赖tidyverse套件实现,步骤如下:
- 先将按列存储的分组宽表转为长表,去重同一分组内的重复字符串(同一分组内多次出现同一值默认仅统计一次)
- 按字符串聚合,统计每个字符串的出现分组列表、出现的分组总数
- 筛选出在≥2个分组中出现的重复字符串,后续可按分组数灵活筛选
代码实现
依赖包加载
library(tidyverse)
示例数据构造
df <- tibble( Group1 = c("AB", "CD", "ED", "GD"), Group2 = c("FG", "ZX", "QW", "AS"), Group3 = c("SA", "AB", "OI", "ZX"), Group4 = c("KD", "ER", "SA", "QW"), Group5 = c("CD", "ZX", "AB", "KD") )
核心统计代码
result_df <- df %>% # 宽表转长表,列名转为分组字段,值转为字符串字段 pivot_longer(cols = everything(), names_to = "group", values_to = "str") %>% # 同一分组内重复出现的字符串仅保留1条,不需要该逻辑可删除此行 distinct(group, str) %>% # 按字符串分组聚合 group_by(str) %>% summarise( # 存储该字符串出现的所有分组名称 appear_groups = toString(group), # 统计该字符串出现的分组总数 group_count = n() ) %>% # 仅保留在至少2个分组中出现的重复字符串 filter(group_count >= 2) %>% # 按出现分组数倒序排列 arrange(desc(group_count))
筛选与可视化
- 筛选仅在N个分组中出现的字符串:将N替换为目标数值即可,比如筛选仅在2个分组出现的字符串:
filter(result_df, group_count == 2) - 基础可视化示例(重复字符串出现分组数柱状图):
如果分组数量≤5个,也可以用ggplot(result_df, aes(x = reorder(str, group_count), y = group_count, fill = factor(group_count))) + geom_col() + coord_flip() + labs(x = "字符串", y = "出现的分组数量", fill = "分组数量")ggvenn包绘制韦恩图,更直观展示跨分组的重叠字符串。
内容的提问来源于stack exchange,提问作者Jen1
相关产品推荐
相关产品推荐

