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只是因为旧的抑制打印错误而无法看到。