R语言:基于共享相似列的不同长度data.frame为首个data.frame添加列
按生物名称匹配合并数据框,为d1添加Status列
嗨,这事儿在数据处理里挺常见的,咱们用R里的两种实用方法都能搞定,我给你一步步讲清楚:
方法1:用基础R的merge()函数
基础R自带的merge()函数就能轻松处理这种不同长度的数据框匹配,咱们只要指定好匹配的列,并且确保保留d1的所有行就行:
# 合并d1和d2,按生物名称匹配,保留d1的全部行 d1_with_status <- merge(d1, d2, by.x = "Organism1", by.y = "Organism2", all.x = TRUE) # 查看合并后的结果 print(d1_with_status)
运行这段代码后,你会得到如下结果:
Organism1 Number1 Number2 Status 1 name1 numberA1 numberB1 Bad 2 name3 numberA3 numberB3 Neutral 3 name5 numberA5 numberB5 Good
参数简单解释下:
by.x:指定d1中用来匹配的列名(这里是Organism1)by.y:指定d2中用来匹配的列名(这里是Organism2)all.x = TRUE:确保d1里的所有行都被保留,哪怕d2里没有对应生物的记录(不过你的例子里d1的生物都在d2里,所以不会出现NA,但这个参数在通用场景里很实用)
方法2:用tidyverse的dplyr::left_join()
如果你习惯用tidyverse的语法,left_join()会更直观,代码也更简洁:
首先得先安装并加载dplyr包(如果还没装的话先跑install.packages("dplyr")):
library(dplyr) # 左连接d1和d2,指定两列的对应匹配关系 d1_with_status <- left_join(d1, d2, by = c("Organism1" = "Organism2")) # 查看合并后的结果 print(d1_with_status)
这个方法得到的结果和上面完全一致,left_join()本身就会保留左边数据框(也就是d1)的所有行,然后匹配右边数据框(d2)的对应状态列。
两种方法都能完美解决你的需求,选你顺手的用就行~
内容的提问来源于stack exchange,提问作者thbtmntgn
相关产品推荐
相关产品推荐

