如何对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
相关产品推荐
相关产品推荐

