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

如何对data.table执行外连接并避免生成重复列

合并带重叠列的data.table(外连接自动合并重复列)

我有两个data.table,二者多数id重合,但各自包含对方没有的id;年份列存在重叠但也有差异:

table1 <- data.table(id=c("a101","a102","a103","a104","a105"),
                     year1=c(0,10,12,414,23),
                     year2=c(4,23,34,45,23))

table2 <- data.table(id=c("a102","a103","a104","a105","a106"),
                     year2=c(23,34,45,23,0),
                     year3=c(14,2,14,12,15))

我希望对它们进行外连接,得到如下格式的table3:

table3 <- data.table(id=c("a101","a102","a103","a104","a105","a106"),
                     year1=c(0,10,12,414,23,NA),
                     year2=c(4,23,34,45,23,0),
                     year3=c(NA,14,2,14,12,15))

看似简单,但我的实际表中有大量年份列,目前找不到不生成year2.x、year2.y这类重复列且无需手动写出所有列名的解决方案。

我当前的解决方案流程繁琐,且内存效率可能不高。由于处理的表非常大,若有支持按引用连接的方案则最为理想,但我也清楚外连接可能无法实现按引用操作:

# 全连接两张表
table3 <- merge(table1, table2, by = "id", all = TRUE)

# 合并重复列
for (col in intersect(names(table1), names(table2))) {
  if (col != "id") {
    table3[[col]] <- fcoalesce(table3[[paste0(col, ".x")]], table3[[paste0(col, ".y")]])
  }
}

# 删除带.x/.y的重复列
table3 <- table3[, !grepl("\\.x|\\.y", names(table3)), with = FALSE]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:13:15