我正在尝试更新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

最佳答案

这里get返回value。在lhs:=中,我们只需要提取列名称字符串。为此,只需用()包装它

dt[ , (nm) := get(nm) + 1]

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

在这里,[[用于提取vector

如果有更多列,
dt[, (nm) := lapply(.SD, `+`, 1), .SDcols = nm]

关于r - 用变量名称==更新列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57328709/

10-12 23:21