R语言实现含|分隔多标识数据框基于部分匹配的合并操作
R实现含多值分隔符列的部分匹配合并
你需要的效果可以通过两种常用方式实现:
方法1:基础R实现(无需安装额外包)
核心思路是遍历拆分df1的ID2列,逐一匹配后拼接结果:
# 直接为df1新增匹配后的ID3列 df1$ID3 <- sapply(strsplit(df1$ID2, split = "\\|"), function(x) { # 筛选匹配到的ID3 matched_id3 <- df2$ID3[df2$ID2 %in% x] # 多结果用|拼接,无匹配返回空字符串,可按需改为NA paste(unique(matched_id3), collapse = "|") })
运行后直接输出df1即可得到预期结果:
> df1 ID1 ID2 ID3 1 A1 B1|B2 C1|C2 2 A2 B1 C1 3 A3 B3 C3 4 A4 B6|B4 C4 5 A5 B0|B6|B3 C3
方法2:tidyverse实现(代码可读性更强)
适合习惯tidyverse语法的场景,通过拆分-匹配-汇总的流程实现:
library(tidyverse) df_result <- df1 %>% # 按|拆分ID2为长格式,每行仅存一个ID2值 separate_rows(ID2, sep = "\\|") %>% # 左连接匹配df2的ID3 left_join(df2, by = "ID2") %>% # 按原始ID1分组汇总 group_by(ID1) %>% summarise( # 还原原始ID2格式 ID2 = paste(ID2, collapse = "|"), # 拼接匹配到的ID3,自动跳过无匹配的NA ID3 = paste(na.omit(unique(ID3)), collapse = "|") ) %>% ungroup()
运行输出df_result和预期结果完全一致。
内容的提问来源于stack exchange,提问作者Kak Schoen
相关产品推荐
相关产品推荐

