如何使用自定义列名聚合(使用"by")data.table而不使用":="?

col*_*ang 5 r data.table

我知道我能做到这一点

  a <- dt[,sum(x), by=y]
Run Code Online (Sandbox Code Playgroud)

我也可以这样做

  dt[,z:=sum(x), by=y] # this would modify dt
Run Code Online (Sandbox Code Playgroud)

但是我不知道为什么我不能这样做:

  a <- dt[,z=sum(x), by=y]
Run Code Online (Sandbox Code Playgroud)

如何使用自定义列名称执行"汇总"?

这是唯一的选择吗?

  a <- copy(dt)
  a[,z:=sum(x), by=y]
Run Code Online (Sandbox Code Playgroud)

Señ*_*r O 10

你正在寻找list()这个j论点:

a <- dt[,list(z=sum(x)), by=y]
Run Code Online (Sandbox Code Playgroud)

  • 你不能在`dt [,,]`的第二个位置写`z =`因为那个函数调用(到`?\`[.data.table \``)没有一个名为z的参数.我无法找到关于通过名称与位置的标准参考,但有[此博客文章](http://blog.moertel.com/posts/2006-01-20-wondrous-oddities-rs-function-call -semantics.html). (2认同)