2015-12-03 3 views
3

Это может быть очень простой вопрос, у меня есть data.table с ключом и более 1000 строк, два из которых могут быть установлены как ключ. Я хочу рассчитать количество групп для этого набора данных.Как рассчитать количество групп, используя R?

Например, простые данные (ID и закон является ключевым)

ID ValueDate Act Volume 
1 2015-01-01 EUR  21 
1 2015-02-01 EUR  22 
1 2015-01-01 MAD  12 
1 2015-02-01 MAD  11 
2 2015-01-01 EUR  5 
2 2015-02-01 EUR  7 
3 2015-01-01 EUR  4 
3 2015-02-01 EUR  2 
3 2015-03-01 EUR  6 

Вот код для генерации тестовых данных:

dd <- data.table(ID = c(1,1,1,1,2,2,3,3,3), 
       ValueDate = c("2015-01-01", "2015-02-01", "2015-01- 01","2015-02-01", "2015-01-01","2015-02-01","2015-01-01","2015-02-01","2015-03-01"), 
       Act = c("EUR","EUR","MAD","MAD","EUR","EUR","EUR","EUR","EUR"), 
       Volume=c(21,22,12,11,5,7,4,2,6)) 

в этом случае, мы можем видеть, что есть составляют подмножества.

Я попытался установить ключ для этой таблицы, как первый,

setkey(dd, ID, Act) 

Тогда я думал, что функция подсчета может работать для подсчета групп. Можно ли использовать функцию count, или может быть простой способ?

Большое спасибо!

ответ

3
nrow(dd[, .(cnt= sum(.N)), by= c("ID", "Act")]) 

# or using base R 
{t <- table(interaction(dd$ID, dd$Act)); length(t[t>0])} 

# or for the counts: 
dd[, .(cnt= sum(.N)), by= c("ID", "Act")] 
    ID Act cnt 
1: 1 EUR 2 
2: 1 MAD 2 
3: 2 EUR 2 
4: 3 EUR 3 
+0

Большое спасибо за вашу помощь !!! – ZAWD

3

Самый быстрый способ - uniqueN.

library(data.table) 
dd <- data.table(ID = c(1,1,1,1,2,2,3,3,3), 
       ValueDate = c("2015-01-01", "2015-02-01", "2015-01-01","2015-02-01", "2015-01-01","2015-02-01","2015-01-01","2015-02-01","2015-03-01"), 
       Act = c("EUR","EUR","MAD","MAD","EUR","EUR","EUR","EUR","EUR"), 
       Volume=c(21,22,12,11,5,7,4,2,6)) 
uniqueN(dd, by = c("ID", "Act")) 
#[1] 4 
+1

«Самый быстрый» - это сокращение; это просто правильный путь. – Frank

+0

спасибо за обмен !!!! – ZAWD

Смежные вопросы