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

如何在首列值与列名均匹配时,从另一data.table为目标表赋值

匹配data.table并填充缺失值

我有两个结构相似的data.table,想要在第一列值匹配且列名一致的情况下,从第一个表提取对应值填充第二个表的NA位置。用mtcars数据集生成的示例代码如下:

library(tibble)
library(data.table)

# 生成第一个带car列的data.table
mtcars_first <- add_column(mtcars, car = rownames(mtcars), .before = 1)

# 生成第二个待填充的data.table
mtcars_second <- rbind(
                   c("Hornet 4 Drive",NA,NA,NA),
                   c("Valiant",NA,NA,NA),
                   c("Duster 360" ,NA,NA,NA)) %>% as.data.table()
colnames(mtcars_second) <- c("car","disp","drat","qsec")

解决方案

用data.table的更新连接可以高效完成这个需求,无需额外合并后再处理:

手动指定列名的写法

# 匹配car列,将mtcars_first的对应列值赋值给mtcars_second
mtcars_second[mtcars_first, on = "car", c("disp", "drat", "qsec") := .(i.disp, i.drat, i.qsec)]

自动匹配列名的灵活写法

如果待填充的列很多,不需要手动列出来,用setdiff获取除了匹配键(car)之外的列名,再批量赋值:

# 获取需要填充的列名(排除car列)
fill_cols <- setdiff(names(mtcars_second), "car")
# 批量填充对应列的值
mtcars_second[mtcars_first, on = "car", (fill_cols) := mget(paste0("i.", fill_cols))]

执行后查看mtcars_second,就能看到NA已经被替换成mtcars_first中对应car的数值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:55:20