data.table .SD 的 LHS 为 :=

2024-04-30

这是参考一个不同的问题 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.


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

data.table .SD 的 LHS 为 := 的相关文章

随机推荐