这是参考一个不同的问题 https://stackoverflow.com/questions/26804362/iteratively-create-columns-based-on-grouped-variables/26805158#26805158我原来的答案不太有效,因为它尝试使用.SD
在左侧:
library(data.table)
data.table(data)[,
paste0(names(.SD), "_tot"):=lapply(.SD, sum), by=region, .SDcols=-1
][1:2]
# biz region june july _tot
# 1: telco mideast 2 122 768
# 2: shipping mideast 29 111 768
但我真的很希望它能做什么
new.names <- paste0(names(data[, -(1:2)]), "_tot")
data.table(data)[,
(new.names):=lapply(.SD, sum), by=region, .SDcols=-1
][1:2]
# biz region june july june_tot july_tot
# 1: telco mideast 2 122 768 3802
# 2: shipping mideast 29 111 768 3802
难道我做错了什么?或者还有另一种方法可以做到这一点(请参阅 LHS 中的 .SD:=
).
EDIT: 仔细想想,就清楚了.SD
不能用于 LHS,因为无论有多少组,LHS 都应该只有一个值,而.SD
更改每个组的值。看起来也没有.SDcols
变量或一些在 LHS 中使用的变量,但我很好奇其他人是否有更好的解决方案来避免引用原始内容data
正如我在这里构建的new.names
.