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