有效的方法来对数据帧进行双重聚合

时间:2015-05-21 17:48:42

标签: r dataframe aggregate-functions

我有一个关于聚合数据帧两次的问题,并涉及重新格式化表。

我有一个表,包含两列:名称和类别。该类别是因子变量,包含10个级别,比如说“0”到“9”。所以数据框看起来像:

name   category
a        0
a        1
a        1
a        4
a        9
b        2
b        2
b        2
b        3
b        7
b        8
c        0
c        0
c        0

我想要聚合的结果如下:

name category.0  category.1  category.2 category.3 category.4 ..... category.9
a        1           2            0         0           1               1
b        0           0            3         1           0               0            
c        3           0            0         0           0               0

它计算每个唯一名称的“0”,“1”,...,“9”的数量。

我为生成结果所做的是使用简单的聚合函数

new_df <- aggregate(category ~ name,df, FUN=summary)

然后取消列出new_df的第二列以获得结果。

然而,它太慢了。我想知道是否有更有效的方法来做到这一点。

1 个答案:

答案 0 :(得分:3)

您可以使用包dcast中的reshape2

library(reshape2)

x = dcast(df, name~category)
setNames(x, c(names(x)[1], paste0('category',names(x)[-1])))

#  name category0 category1 category2 category3 category4 category7 category8 category9
#1    a         1         2         0         0         1         0         0         1
#2    b         0         0         3         1         0         1         1         0
#3    c         3         0         0         0         0         0         0         0