3

假设我有以下代码:

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 并且它们保存在 vector 中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](注意这个确切的表达方式不起作用)。

4

1 回答 1

5

这将所有列相加,除了rowid

x[, sum(.SD), by = rowid]

这仅对字符向量中命名的那些列求和colnames

x[, sum(.SD), by = rowid, .SDcols = colnames]

在这两种情况下,总和都是rowid

于 2013-05-22T15:49:12.750 回答