【问题标题】:Counts of category by group按组分类的计数
【发布时间】:2018-02-25 22:37:09
【问题描述】:

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

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中的水平。

【问题讨论】:

    标签: r data.table grouping summary


    【解决方案1】:

    我通过将“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
    

    【讨论】:

    • 看起来这种方法在不创建新列的情况下也可以工作:dcast(dt, id+month~paste0("fact",fact), value.var="fact")
    猜你喜欢
    • 1970-01-01
    • 2017-09-13
    • 2022-09-22
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    相关资源
    最近更新 更多