2016-01-20 67 views
1

独特的列值的组合让我们说我有一个这样的数据表:一批具有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方式?

+1

@DavidArenburg,忘记了'uniqueN''的差异dplyr方法将是'distinct(smalldat,group1,group2)%>%tally()'或者只是'tally(distinct(smalldat))'的示例数据' –

回答

4

使用uniqueN.SD.SDcols沿:

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

甚至更​​高效,@DavidArenburg显示下评论:

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

s'by' arg。太好了!请随时编辑它。 – Arun

1

我们可以使用uniqueby选项。

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

或者

length(smalldat[,.GRP ,.(group1, group2)]$GRP)