使用变量名称使用:=更新列

时间:2019-08-02 14:40:35

标签: r data.table

我正在尝试更新data.table中的列,但是我无法使用变量来引用列名:

dt = data.table(a = 1:10, b = 1:10)
nm = 'a'
dt[ , get(nm) := get(nm) + 1]
  

get(nm)中的错误:找不到对象'a'

如果我尝试dt[ , nm := get(nm) + 1],我会得到一个新列nm

我想要的是

     a  b
 1:  2  1
 2:  3  2
 3:  4  3
 4:  5  4
 5:  6  5
 6:  7  6
 7:  8  7
 8:  9  8
 9: 10  9
10: 11 10

2 个答案:

答案 0 :(得分:3)

此处close_fds=True返回get。在value的{​​{1}}中,我们只需要提取列名字符串。为此,只需用lhs

:=

从技术上讲,()是在dt[ , (nm) := get(nm) + 1] 中指定感兴趣的列的首选方法。

.SDcols

在这里,data.table用于提取dt[, (nm) := .SD[[1]] + 1, .SDcols = nm]

如果还有更多列,

[[

答案 1 :(得分:2)

尝试一下:

library(data.table)
upcols <- c('a','b')
dt[, (upcols) := lapply(.SD, function(x) x +1), .SDcols = upcols]

如果只希望更新“ a”,请从upcols向量中删除“ b”。