data.table - 使用基于相同列的过滤器汇总列

时间:2015-10-20 13:13:23

标签: r data.table

数据表结构如下:

DT <- data.table(category = c("categ A","categ A","categ A","categ B","categ B"),
                 type = c("type 1","type 1","type 3","type 2", "type 1"))
     category   type
1:  categ A     type 1
2:  categ A     type 1
3:  categ A     type 3
4:  categ B     type 2
5:  categ B     type 1

预期的输出是:

category    type1   type2   type3
categ A     2           0           1
categ B     0           1           1

基本上我需要按category进行汇总并创建三列,为每个列指定一个过滤器 - 我需要,以便能够手动指定列名,而不是基于数据

我的(有希望的)尝试是这样的:

DT_new <- DT[, list(type1=.N[type=="type 1"],
                    type2=.N[type=="type 2"],
                    type3=.N[type=="type 3"]),
               by='Date')

这产生了一些奇怪的输出。我知道我可以创建三个独立的数据表,然后将它们合并在一起,但也许还有另一种方法吗?

2 个答案:

答案 0 :(得分:2)

我们可以使用dcast

dcast(DT, category~type, value.var='type', length)

如果我们需要手动指定列名,

DT[, list(type1= sum(type=='type 1'),
          type2= sum(type=='type 2'),
          type3 = sum(type=='type 3')), by = category]

答案 1 :(得分:0)

也许它已经足够好了。

as.data.frame.matrix(with(DT,table(category, type)))
        type 1 type 2 type 3
categ A      2      0      1
categ B      1      1      0