4
我的问题基本上与此问题相同:data.table join then add columns to existing data.frame without re-copy。r - data.table加入,然后将所有列从一个表添加到另一个
基本上我有一个模板的键,我想从其他data.tables通过相同的键分配列的模板。
> template
id1 id2
1: a 1
2: a 2
3: a 3
4: a 4
5: a 5
6: b 1
7: b 2
8: b 3
9: b 4
10: b 5
> x
id1 id2 value
1: a 2 0.01649728
2: a 3 -0.27918482
3: b 3 0.86933718
> y
id1 id2 value
1: a 4 -1.163439
2: b 4 2.267872
3: b 5 1.083258
> template[x, value := i.value]
> template[y, value := i.value]
> template
id1 id2 value
1: a 1 NA
2: a 2 0.01649728
3: a 3 -0.27918482
4: a 4 -1.16343917
5: a 5 NA
6: b 1 NA
7: b 2 NA
8: b 3 0.86933718
9: b 4 2.26787248
10: b 5 1.08325793
>
但如果x
和y
有说100列,那么它是不可能写出来的value := i.value
语法的所有列。有没有办法做同样的事情,但所有的列在x
和y
?
编辑: 如果我做y[x[template]]
,然后它会创建单独的value
列,这是不打算:
> y[x[template]]
id1 id2 value value.1
1: a 1 NA NA
2: a 2 NA 0.01649728
3: a 3 NA -0.27918482
4: a 4 -1.163439 NA
5: a 5 NA NA
6: b 1 NA NA
7: b 2 NA NA
8: b 3 NA 0.86933718
9: b 4 2.267872 NA
10: b 5 1.083258 NA
>
是的,但我想分配列'模板'。本质上,我想用许多'data.tables'来填充模板,比如'x'。例如,'x'将包含某些键的值,'y'将包含其他键的值。所以模板< - x [template]将不起作用。 – ezbentley
@阿伦:我加了一些例子,希望澄清我的情况。 – ezbentley
太好了,现在我明白你的意思了。怎么样[这篇文章](http://stackoverflow.com/a/22596160/559784)?你可以构造一个类似的表达式,并且每次都是“eval”。 – Arun