【发布时间】:2014-03-31 17:08:29
【问题描述】:
我的问题与这个问题基本相同:data.table join then add columns to existing data.frame without re-copy。
基本上我有一个带有键的模板,我想通过相同的键将其他 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
>
【问题讨论】:
-
是的,但我想将列分配给
template。本质上,我想用许多data.tables填充模板,例如x。例如,x将包含一些键的值,y将包含一些其他键的值。所以模板 -
@Arun:我添加了一些示例以希望澄清我的情况。
-
太好了,现在我明白你的意思了。 this post 怎么样?您可以构造一个类似的表达式,每次只需
eval。 -
我认为该帖子会起作用。我希望会有更优雅的语法。谢谢。
标签: r data.table