如何在R中匹配多列DataFrame并添加匹配后的关联列?
解决方案:匹配多列并添加对应值
我明白你的问题了——你需要把df1里的assoc值分别匹配到df2的col1和col2列上,生成对应的con1和con2列。直接用merge()确实只能处理单列匹配,咱们可以分两步完成这个需求,下面提供两种常用的实现方式:
方法一:使用tidyverse(dplyr)
这种方法更直观,适合习惯管道操作的用户:
library(dplyr) # 第一步:匹配col1与df1的con,得到con1列 df_temp <- df2 %>% left_join(df1, by = c("col1" = "con")) %>% rename(con1 = assoc) # 第二步:匹配col2与df1的con,得到con2列,并调整列顺序 final_result <- df_temp %>% left_join(df1, by = c("col2" = "con")) %>% rename(con2 = assoc) %>% select(pos, col1, con1, col2, con2) # 查看结果 view(final_result)
方法二:使用Base R
如果你不想加载额外包,用Base R的match()函数就能搞定:
# 为col1匹配对应的assoc值,生成con1 df2$con1 <- df1$assoc[match(df2$col1, df1$con)] # 为col2匹配对应的assoc值,生成con2 df2$con2 <- df1$assoc[match(df2$col2, df1$con)] # 调整列顺序到你期望的格式 final_result <- df2[, c("pos", "col1", "con1", "col2", "con2")] # 查看结果 view(final_result)
两种方法最终都会得到你想要的输出:
pos col1 con1 col2 con2
-3 A 2 B 3.4
-2 B 3.4 T -0.4
-1 B 3.4 D -2.3
0 T -0.4 A 2
1 T -0.4 E -1
2 D -2.3 C 4.6
3 E -1 F 0.48
核心思路是把df1当成一个键值映射表(con是键,assoc是对应的值),分别对df2的两列进行映射匹配即可。
内容的提问来源于stack exchange,提问作者student24
相关产品推荐
相关产品推荐

