我有两个data.tables:
DT1 <- data.table(A=c('A', 'B', 'C'), idx=c(1,2,3))
DT2 <- data.table(idx=c(1,2,3), A=rep('foo', 3), B=rep('bar', 3), C=rep('baz', 3))
> DT1
A idx
1: A 1
2: B 2
3: C 3
> DT2
idx A B C
1: 1 foo bar baz
2: 2 foo bar baz
3: 3 foo bar baz
我想谈谈这个问题:
> DT3
idx value
1: 1 foo
2: 2 bar
3: 3 baz
基本上我想在DT1
上合并DT2
和idx
,但我只希望DT2
中的列与A
的值相对应DT1
行。 DT1和DT2具有相同的行数,并且行的顺序相同
是否有data.table本地方式来执行此操作?
答案 0 :(得分:6)
在使用by-without-by
替换旧(隐式)by=.EACHI
功能后更新了答案(并使用on=
参数而不是设置密钥:
require(data.table) # v1.9.6+
DT2[DT1, .(value=get(i.A)), on="idx", by=.EACHI]
# idx value
# 1: 1 foo
# 2: 2 bar
# 3: 3 baz