You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:06:22