在R语言中基于双条件实现DataFrame数据查找匹配
多列匹配左连接实现df2添加row3列
首先先确认原始数据定义:
df1 <- data.frame(row1 = c("A", "A", "A", "B", "B", "B", "C", "C", "C"), row2 = c("aa", "bb", "cc", "aa", "bb", "cc", "aa", "bb", "cc"), row3 = c(1, 5, 7, 6, 8, 9, 3, 2, 4)) df2 <- data.frame(row1 = c("A", "A", "B", "B", "B", "C", "C"), row2 = c("aa", "bb", "aa", "bb", "cc", "aa", "cc"))
你可以用以下两种常用方法实现多列匹配的左连接,给df2添加row3列:
方法一:Base R的merge函数
通过指定by参数为多列名,all.x=TRUE实现左连接(保留df2的所有行):
result_merge <- merge(df2, df1, by = c("row1", "row2"), all.x = TRUE)
运行后得到的结果完全符合你的需求:
row1 row2 row3 1 A aa 1 2 A bb 5 3 B aa 6 4 B bb 8 5 B cc 9 6 C aa 3 7 C cc 4
方法二:tidyverse的dplyr包
如果习惯用tidyverse语法,使用left_join函数,同样指定连接列即可:
首先加载dplyr包:
library(dplyr)
执行左连接:
result_join <- df2 %>% left_join(df1, by = c("row1", "row2"))
得到的结果与方法一完全一致。
关键注意点
- 确保两个数据框中用于匹配的列(row1和row2)数据类型完全一致(比如都是字符型),否则可能出现匹配失败;
- 如果df2包含其他列,这两种方法都会保留所有原有列,仅新增row3列,适配你的实际场景。
内容的提问来源于stack exchange,提问作者Céline
相关产品推荐
相关产品推荐

