假设我有一个data.table

a <- data.table(id=c(1,1,2,2,3),a=21:25,b=11:15,key="id")

我可以这样添加新列:
a[, sa := sum(a), by="id"]
a[, sb := sum(b), by="id"]
> a
   id  a  b sa sb
1:  1 21 11 43 23
2:  1 22 12 43 23
3:  2 23 13 47 27
4:  2 24 14 47 27
5:  3 25 15 25 15

但是,假设我有列名:
for (n in c("a","b")) {
  s <- paste0("s",n)
  a[, s := sum(n), by="id", with=FALSE] # ERROR: invalid 'type' (character) of argument
}

我该怎么办?

最佳答案

您也可以这样做:

a <- data.table(id=c(1,1,2,2,3),a=21:25,b=11:15,key="id")

a[, c("sa", "sb") := lapply(.SD, sum), by = id]

或更概括地说:
cols.to.sum = c("a", "b")
a[, paste0("s", cols.to.sum) := lapply(.SD, sum), by = id, .SDcols = cols.to.sum]

关于r - 按列名的data.table操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21024198/

10-12 17:23
查看更多