将数据传递给data.table中具有未知数量的以编程方式定义的变量的函数

时间:2013-05-22 15:40:33

标签: r data.table

我们假设我有以下代码:

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]之类的东西(注意这个确切的表达不起作用)。

1 个答案:

答案 0 :(得分:5)

rowid以外的所有列:

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

这只对在字符向量colnames中命名的列进行求和:

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

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