2013-03-13 4 views
1

У меня есть набор данных X, как:Р: сумма на разных уровнях

customer_id event_type tot_count 
931 1 5 
231 2 6 
231 1 3 
333 3 9 
444 1 1 
931 3 3 
333 1 21 
444 2 43 

мне нужна сумма на customer_id и event_type уровне. Это код 1 строка в SQL, как:

select customer_id, event_type, sum(tot_count) from X group by 1,2 

мне нужна та же операция в R.

ответ

5

Вы можете использовать функцию aggregate:

aggregate(tot_count ~ customer_id + event_type, X, sum) 

customer_id event_type tot_count 
1   231   1   3 
2   333   1  21 
3   444   1   1 
4   931   1   5 
5   231   2   6 
6   444   2  43 
7   333   3   9 
8   931   3   3 
+0

(+1) Избили меня к нему – NPE

3

Для удовольствия, вот несколько вариантов:

Поскольку вы знаете SQL, sqldf

> sqldf("select customer_id, event_type, sum(tot_count) from mydf group by 1,2") 
    customer_id event_type sum(tot_count) 
1   231   1    3 
2   231   2    6 
3   333   1    21 
4   333   3    9 
5   444   1    1 
6   444   2    43 
7   931   1    5 
8   931   3    3 

Если у вас есть много данных, data.table

> library(data.table) 
> DT <- data.table(mydf, key = c("customer_id", "event_type")) 
> DT[, sum(tot_count), by = key(DT)] 
    customer_id event_type V1 
1:   231   1 3 
2:   231   2 6 
3:   333   1 21 
4:   333   3 9 
5:   444   1 1 
6:   444   2 43 
7:   931   1 5 
8:   931   3 3 
Смежные вопросы