我正在尝试更新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
答案 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”。