R数据表组没有j参数

时间:2014-07-02 22:27:25

标签: r data.table

如何在不提供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)])

获得我想要的唯一/最快/最简单的方式?

1 个答案:

答案 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以获取更多信息。