假设我有以下代码:
x = data.table(rowid=1:10, N1=2:11, N2=3:12, N3=4:13)
x[, sum(c(N1, N2, N3)),by=rowid]
现在,假设我事先不知道列名N1,N2,N3,它们已保存在向量
colnames=c("N1", "N2", "N3")
中。如果我知道要传递给sum()
的变量数量,则可以按以下方式插入colnames
:x[, sum(c(get(colnames[1]),get(colnames[2]),get(colnames[3]))),by=rowid]
现在假设我不知道
colnames
的长度。有什么办法可以重写上面的内容吗?像x[, sum(c(sapply(colnames, as.name))),by=rowid]
这样的东西(请注意,此精确表达式不起作用)。 最佳答案
这将对除rowid
之外的所有列求和:
x[, sum(.SD), by = rowid]
这仅对字符向量
colnames
中命名的那些列求和:x[, sum(.SD), by = rowid, .SDcols = colnames]
在两种情况下,总和都是
rowid
。