如何在R语言中匹配数据框列值并关联对应列数据
解决方法:匹配数据框并新增列
嘿,要实现你想要的匹配和新增列需求,在R里有两种非常常用的方式,我给你一步步演示:
首先先把你给出的两个数据框定义好:
d <- data.frame(v1 = c("A","B","C","D","E","F","G","H"), v2 = c(1,2,3,4,5,6,7,8), v3 = c(1,2,3,4,5,6,7,8)) m <- data.frame(v4 = c("B","H","A","C","D"))
方法一:使用Base R的merge()函数
merge()是R基础包自带的合并函数,专门用来处理这种数据匹配需求,参数设置好就能直接得到结果:
# 合并两个数据框,以m的v4和d的v1为匹配键,保留m的所有行 m_result <- merge(m, d, by.x = "v4", by.y = "v1", all.x = TRUE) # 调整列名,把原来的v2和v3改成v5和v6 colnames(m_result)[2:3] <- c("v5", "v6") # 如果需要和示例的行顺序完全一致,加上这行 m_result <- m_result[match(m$v4, m_result$v4), ]
运行后查看结果:
> m_result v4 v5 v6 1 B 2 2 2 H 8 8 3 A 1 1 4 C 3 3 5 D 4 4
方法二:使用dplyr包的left_join()函数
如果你习惯用tidyverse系列的工具,dplyr的left_join()会更直观,代码可读性更强:
首先需要先加载dplyr包(没安装的话先运行install.packages("dplyr")):
library(dplyr) m_result <- m %>% left_join(d, by = c("v4" = "v1")) %>% # 以v4和v1为匹配键进行左连接 rename(v5 = v2, v6 = v3) # 将v2、v3重命名为v5、v6
运行后直接得到和你示例完全一致的结果:
> m_result v4 v5 v6 1 B 2 2 2 H 8 8 3 A 1 1 4 C 3 3 5 D 4 4
这两种方法都能完美实现你的需求,选哪种就看你平时的代码习惯啦~
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

