在R语言中如何基于数据框共同值匹配添加对应id列?
为df2匹配df1对应的id值
首先定义两个数据框:
# 创建df1 df1 <- data.frame(id=1:4, x1=c(2,3,5,3), x2=c(3,2,3,2), x3=c(3,5,1,3), x4=c(4,3,2,3)) df1
输出:
id x1 x2 x3 x4
1 1 2 3 3 4
2 2 3 2 5 3
3 3 5 3 1 2
4 4 3 2 3 3
# 创建df2 df2 <- data.frame(x1=c(2,5), x2=c(3,3), x3=c(3,1)) df2
输出:
x1 x2 x3
1 2 3 3
2 5 3 1
需求:为df2添加id列,使其包含df1中x1、x2、x3字段完全匹配的行对应的id值(即1和3)。
方法1:基础R的merge()函数
利用merge()按指定列匹配,保留df2的所有行并关联对应id:
# 匹配并提取所需列 result_df <- merge(df2, df1[, c("id", "x1", "x2", "x3")], by = c("x1", "x2", "x3")) # 调整列顺序,将id置于首位 result_df <- result_df[, c("id", "x1", "x2", "x3")] result_df
执行后得到结果:
id x1 x2 x3
1 1 2 3 3
2 3 5 3 1
方法2:tidyverse的inner_join()(更直观)
使用dplyr包的inner_join()实现关联,操作更简洁:
# 加载dplyr包 library(dplyr) # 匹配并调整列顺序 result_df <- df2 %>% inner_join(df1 %>% select(id, x1, x2, x3), by = c("x1", "x2", "x3")) %>% relocate(id) result_df
执行后同样得到目标结果:
id x1 x2 x3
1 1 2 3 3
2 3 5 3 1
内容的提问来源于stack exchange,提问作者user11806155
相关产品推荐
相关产品推荐

