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

R语言data.table连接操作时如何指定获取结果的对应列

正确实现方案

方案1:使用by = .EACHI逐组取值(写法直观)

利用data.table连接时的逐组运算特性,每组对应唯一的column取值,可直接用get取出对应列的值:

library(data.table)
# 原始数据
tab1 = data.table(z = c(1,2,3,4),
                  x = c("A", "B", "C", "D"),
                  y = c("E", "F", "G", "H"))
tab2 = data.table(z = c(1,2,3,4),
                  column = c("x", "x", "y", "y"))

# 核心代码
tab2[, val := tab1[tab2, on = .(z), get(i.column), by = .EACHI]$V1]

运行后tab2的结果完全符合预期:

zcolumnval
1xA
2xB
3yG
4yH

方案2:矩阵索引(大数据量下效率更高)

将tab1的目标列转为矩阵,通过行列坐标直接定位取值,避免逐组运算开销:

tab2[, val := as.matrix(tab1[, .(x, y)])[cbind(match(tab2$z, tab1$z), match(tab2$column, c("x", "y")))]]

原写法失效原因说明

  • 第一种写法get(i.column):i.column是长度为4的完整向量,get仅支持传入单个列名字符串,无法批量解析向量内的多个列名
  • 第二种写法column, with=F:此处的column会被识别为要从tab1中取名字为column的列,但tab1不存在该列,因此无法返回预期结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:54:04