如何在data.table中交叉引用列

时间:2018-01-17 13:35:15

标签: r data.table

我需要从data.table中的列交叉引用到其中的多个其他列。作为一个例子,我有:

library(data.table) 

dt = data.table(mtcars)
sub = dt[1:3]
sub[, v1 := ('vs', 'am', 'gear')]
head(dt) 
mpg     cyl disp    hp  drat    wt      qsec    vs  am  gear    carb
21.0    6   160    110  3.90    2.620   16.46   0   1   4        4
21.0    6   160    110  3.90    2.875   17.02   0   1   4        4
22.8    4   108    93   3.85    2.320   18.61   1   1   4        1

因此列v1包含应该采用哪个列的信息。所以对于sub我想要一个具有值的新列: 第1行:列中的值' vs'从第一行开始 第2行:来自列' am'的值从第二排 第3行:'齿轮的第三行的值 简而言之,像一个data.table,如

mpg    cyl  disp hp     drat    wt      qsec    vs  am  gear carb   v1  v2
21.0    6   160  110    3.90    2.620   16.46   0   1   4    4      vs  0
21.0    6   160  110    3.90    2.875   17.02   0   1   4    4      am  1 
22.8    4   108  93     3.85    2.320   18.61   1   1   4    1    gear  4

不幸的是像

sub[, v2 := get(value))]

sub[, v2 := get((sub$value))] 

不会导致解决方案,因为v2将等于[0,0,1]但不会[0,1,4] 提前致谢

1 个答案:

答案 0 :(得分:2)

好吧,这比我想象的要容易,但是对于那些希望通过相应列实现类似功能的人来说,解决了我的问题。所以解决方案是:

sub[, v2 := get(c(value)), by = value]

这导致了期望的结果:

head(sub[, .(mpg, v1, v2 )]
mpg     v1      v2
21.0    vs      0
21.0    am      1
22.8    gear    4