按组分类的计数

Counts of category by group

我的数据中有一个变量是分类变量。我想按组计算每个类别的计数。我的数据具有以下结构:

dt <- data.table("fact"=c(2,2,1,3,3,2,3,3,3,3,2,2,1,3,3,2,3,3,3,3,2,2,1,3,3,2,3,3,3,3), "month"=rep(1:5, 6), "id"=c(rep("a", 15), rep("b", 15)))

运行后数据应该如下所示:

dt1 <- data.table("id" = c(rep("a", 5), rep("b", 5)), "month" = rep(1:5,2), 
"fact1" = c(0,0,2,0,0,0,0,1,0,0),
"fact2" = c(3,2,0,0,0,3,1,0,0,0),
"fact3" = c(0,1,1,3,3,0,2,2,3,3))

请注意,fact1、fact2、fact3 是分类变量 fact 中的水平。

我创建了一个新的 character-vector 列,方法是将 "fact" 粘贴到事实列中的值,然后转换为宽格式:

library(data.table)

dt <- data.table("fact"=c(2,2,1,3,3,2,3,3,3,3,2,2,1,3,3,2,3,3,3,3,2,2,1,3,3,2,3,3,3,3), "month"=rep(1:5, 6), "id"=c(rep("a", 15), rep("b", 15)))

dt[, name := paste("fact", fact, sep="")]
dcast(dt, id+month~name, value.var="name")

产量

    id month fact1 fact2 fact3
 1:  a     1     0     3     0
 2:  a     2     0     2     1
 3:  a     3     2     0     1
 4:  a     4     0     0     3
 5:  a     5     0     0     3
 6:  b     1     0     3     0
 7:  b     2     0     1     2
 8:  b     3     1     0     2
 9:  b     4     0     0     3
10:  b     5     0     0     3