如何在不提供j参数的情况下按某些列对数据表进行分组?例如,假设您有表
dt<-data.table(x=c("a","b","b","b"),y=c(1,1,1,2),z=c(1,2,3,4))
dt
x y z
1: a 1 1
2: b 1 2
3: b 1 3
4: b 2 4
如果你想要对x和y的唯一组合求和,你可以
dt[,list(z=sum(z)),by=list(x,y)]
x y z
1: a 1 1
2: b 1 5
3: b 2 4
但如果你只想要x和y的独特组合怎么办?我经常发现自己想做像
这样的事情dt[,list(),by=list(x,y)]
或
dt[,,by=list(x,y)]
但不起作用。是
unique(dt[,list(x,y)])
获得我想要的唯一/最快/最简单的方式?
答案 0 :(得分:3)
unique(dt[, list(x,y)])
由于子集而制作副本。这样做的惯用方法是:
unique(dt, by=c("x", "y"))
如果您不想使用z
col,则可以使用:=
通过链接将其删除,如下所示:
ans <- unique(dt, by=c("x", "y"))[, z := NULL]
另请查看?unique
以获取更多信息。