2016-01-20 3 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 

Я хочу, чтобы вычислить число наблюдаемых комбинации group1 и group2.

dplyr путь будет (возможно, не самый оптимальный):

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

Что бы data.table путь?

+1

Отличительный подход dplyr был бы «разным» (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

@DavidArenburg, забыл о' uniqueN' ' s 'by' arg. Ницца! Не стесняйтесь редактировать его. – Arun

1

Мы можем использовать unique с опцией by.

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

Или

length(smalldat[,.GRP ,.(group1, group2)]$GRP) 
Смежные вопросы