根据""创建列名称参数data.table方式

时间:2015-10-12 07:08:07

标签: r data.table

说我有以下data.table

dt <- data.table(var = c("a", "b"), val = c(1, 2))

现在,我想向dt添加两个新列,名为ab添加相应的值(1,2)。我可以通过循环执行此操作,但我想以data.table方式执行此操作。

结果将是data.table,如下所示:

dt.res <- data.table(var = c("a", "b"), val = c(1, 2), #old vars 
                     a = c(1, NA), b = c(NA, 2)) # newly created vars

到目前为止,我想出了类似的东西

dt[, c(xx) := val, by = var]

其中xxdata.table - 与.N类似的命令,用于解决by - 组的值。

感谢您的帮助!

附录:for循环方式

带有for - 循环而不是by - 参数的非data.table-way看起来像这样:

for (varname in dt$var){
     dt[var == varname, c(varname) := val]
}

1 个答案:

答案 0 :(得分:5)

根据显示的示例,我们可以使用dcast中的data.table将长格式转换为宽格式,并使用原始数据集on加入&#39; val&# 39;柱。

library(data.table)#v1.9.6+
dt[dcast(dt, val~var, value.var='val'), on='val']
#   var val  a  b
#1:   a   1  1 NA
#2:   b   2 NA  2

或者@CathG在评论中提到,对于以前的版本merge或者设置键列然后加入。

merge(dt, dcast.data.table(dt, val~var, value.var='val'))