R:不同级别的总和

时间:2013-03-13 07:24:00

标签: r sum aggregate levels

我有一个数据集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_idevent_type级别的总和。 这是SQL中的1行代码:

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

我需要在R中执行相同的操作。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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