我们说我有一个这样的数据表:
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
我想计算观察到的group1
和group2
组合的数量。
dplyr
方式(可能不是最佳方式):
nrow(smalldat %>% select(group1, group2) %>% distinct())
data.table
方式是什么?
答案 0 :(得分:4)
使用uniqueN
以及.SD
和.SDcols
:
smalldat[, uniqueN(.SD), .SDcols=group1:group2]
# [1] 4
甚至更高效,正如@DavidArenburg在评论中所表示的那样:
uniqueN(smalldat, by=c("group1", "group2"))
# [1] 4
答案 1 :(得分:1)
我们可以将unique
与by
选项一起使用。
nrow(unique(smalldat, by = c('group1', 'group2')))
或者
length(smalldat[,.GRP ,.(group1, group2)]$GRP)