数据表结构如下:
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')
这产生了一些奇怪的输出。我知道我可以创建三个独立的数据表,然后将它们合并在一起,但也许还有另一种方法吗?
答案 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