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

R语言如何合并结构一致存在行重叠的数据框实现匹配值覆盖

R中按指定规则合并两个重叠数据框

已知两个数据框列名一致、姓名存在重叠,合并时需全量保留所有唯一姓名,重名记录优先取b中的年龄值,可通过以下两种方式实现:


方案1:基础R实现(无需安装额外包)

逻辑直接,运行效率高:先剔除a中与b重名的记录,再将处理后的a与全量b按行拼接即可。

# 初始化原始测试数据
a = data.frame(c("Joe","Bill","Frank"), c("30","31",""))
b = data.frame(c("Frank","Chuck"), c("32","40"))
names(a) = c("name","age")
names(b) = c("name","age")

# 过滤a中已经在b里存在的姓名记录
a_filtered <- a[!a$name %in% b$name, ]
# 按行拼接得到结果
result <- rbind(a_filtered, b)
# 可选:重置行名,优化输出格式
rownames(result) <- NULL

运行后输出的结果完全符合要求:

name age
1   Joe  30
2  Bill  31
3 Frank  32
4 Chuck  40

方案2:dplyr实现(适配tidyverse数据处理流)

如果平时习惯用dplyr做数据处理,可以用分组切片的方式写,代码可读性更强:

library(dplyr)

result <- bind_rows(a, b) %>%
  group_by(name) %>%
  # 按行拼接时b的记录排在a之后,同姓名取最后一条即为b的对应值
  slice_tail(n = 1) %>%
  ungroup()

小提示:如果后续需要调整优先级,只要调换bind_rows()里两个数据框的传入顺序即可,排在后面的表重名记录会覆盖前面的。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:09:27