data.table的唯一列值组合的数量

时间:2016-01-20 12:44:37

标签: r data.table

我们说我有一个这样的数据表:

smalldat <- data.table(group1 = rep(1:2, each = 3), 
                   group2 = rep(c('a','b'), times = 3,
                   value = 1:6)

如下所示:

group1    group2    value
1         a         1
1         b         2
1         a         3
2         b         4
2         a         5
2         b         6

我想计算观察到的group1group2组合的数量。

dplyr方式(可能不是最佳方式):

nrow(smalldat %>% select(group1, group2) %>% distinct())

data.table方式是什么?

2 个答案:

答案 0 :(得分:4)

使用uniqueN以及.SD.SDcols

smalldat[, uniqueN(.SD), .SDcols=group1:group2]
# [1] 4

甚至更高效,正如@DavidArenburg在评论中所表示的那样:

uniqueN(smalldat, by=c("group1", "group2"))
# [1] 4

答案 1 :(得分:1)

我们可以将uniqueby选项一起使用。

 nrow(unique(smalldat, by = c('group1', 'group2')))

或者

length(smalldat[,.GRP ,.(group1, group2)]$GRP)
相关问题