R data.table:聚合/汇总后如何删除分组变量

R data.table:聚合/汇总后如何删除分组变量,r,group-by,data.table,R,Group By,Data.table,我有一个数据框,如下所示。我想通过元素id对计数进行总结,然后删除元素id。我想有效地完成这项工作,但我只能通过对变量进行汇总和赋值,然后删除带有[,element_id:=NULL]的列来实现 element_id count 1 1 1 2 1 1 3 1 3 4 1 2 5 2 1 6 2 1 7

我有一个数据框,如下所示。我想通过
元素id
计数进行总结,然后删除
元素id
。我想有效地完成这项工作,但我只能通过对变量进行汇总和赋值,然后删除带有
[,element_id:=NULL]
的列来实现

   element_id count
1           1     1
2           1     1
3           1     3
4           1     2
5           2     1
6           2     1
7           2     1
8           2     3
9           2     1
10          2     2
以下是所需的输出:

   short poly
1:     3    1
2:     5    1
这是我的密码:

library(data.table)

long_dat <- structure(list(
              element_id = c(1L,1L,1L,1L,2L,2L,2L,2L,2L,2L),
              count = c(1,1,3,2,1,1,1,3,1,2)),
              .Names = c("element_id","count"), row.names = c(NA,-10L), class = "data.frame")

data.table::setDT(long_dat)
data.table::setkey(long_dat, "element_id")
long_dat[, list(short = sum(count < 3), poly = sum(count > 2)), by=element_id]

# almost there
   element_id short poly
1:          1     3    1
2:          2     5    1

# an attempt to aggregate and drop at once but the aggregation does not occur
long_dat[, list(short = sum(count < 3), poly = sum(count > 2)), by=element_id][, element_id:=NULL]

# works but I assume the reassignment is inefficient
long_dat <- long_dat[, list(short = sum(count < 3), poly = sum(count > 2)), by=element_id]
long_dat[, element_id:=NULL]
库(data.table)
long_dat 2)),by=element_id]
#快到了
元素id短多边形
1:          1     3    1
2:          2     5    1
#一次尝试聚合和删除,但未发生聚合
long_dat[,list(short=sum(count<3),poly=sum(count>2)),by=element_id][,element_id:=NULL]
#工作正常,但我认为重新分配是低效的
long_dat 2)),by=element_id]
长数据[,元素id:=NULL]

Language标签?:)此外,您的尝试有效,但无法保存在任何位置,例如,
res2)),by=element\u id][,element\u id:=NULL]
是不是有其他方法可以使用
[,gid:=NULL]
删除?他们说,后者几乎没有成本。您可以交替执行
[,!“gid”,with=FALSE]
您汇总了数据,但没有将其分配到任何位置,那么为什么要更新它呢?当您使用
:=
时,您已经在操作聚合数据,而不是原始数据。另外,
:=
在v1.9.5中禁止打印,您需要在
:=
分配后调用
打印
两次,因为在以前的版本中存在错误,请参见@smci,我不知道问题是什么,所以没有回答。如果泰勒有这种倾向,他可以自我回答;或者你可以。顺便说一句,我打开了一个请求,要求省略第一个DT[…]@Frank中的by=列:问题似乎很清楚,“如何在聚合/汇总之后以DT的方式删除分组变量”,我重新命名了它。答案是“是
dt[,分组=NULL]
是推荐的方法”。OP只是因为旧的抑制打印错误而无法看到。