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

R语言如何通过指定列ID与行名匹配合并两个data.frame

R数据框合并问题解决方法

问题原因

你之前的代码存在两个核心问题:

  • cbind(df1$Taxa, df2) 是按行位置直接拼接,没有根据Taxa值做匹配,且两个数据框行数不一致,无法得到正确结果
  • merge(rownames(df2), df1, by = "Taxa") 第一个参数传入的是行名字符向量,不是带Taxa列的数据框,参数类型错误,同时未设置保留df1所有行的参数

解决代码

依赖dplyr包版本

library(dplyr)
# 1. 将df2的行名转为Taxa列,按Taxa去重(保留每个Taxa最后一条记录,匹配你的预期输出)
df2_unique <- df2 %>%
  mutate(Taxa = rownames(df2)) %>%
  group_by(Taxa) %>%
  slice_tail(n = 1) %>%
  ungroup()

# 2. 左连接合并,保留df1所有行,同时自动维持df1原始顺序
result <- left_join(df1, df2_unique, by = "Taxa")

基础R版本(无需额外安装包)

# 1. 处理df2:行名转Taxa列,去重保留每个Taxa最后一条记录
df2$Taxa <- rownames(df2)
df2_unique <- df2[!duplicated(df2$Taxa, fromLast = TRUE), ]

# 2. 左连接合并,保留df1所有行
result <- merge(df1, df2_unique, by = "Taxa", all.x = TRUE)
# 3. 恢复df1的原始行顺序
result <- result[order(match(result$Taxa, df1$Taxa)), ]

说明

如果df2中同一个Taxa的多条记录你需要保留其他规则的记录,可以调整去重逻辑:比如把slice_tail改成slice_head保留第一条,或者根据实际业务规则筛选即可。

内容的提问来源于stack exchange,提问作者abraham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:54:06