R 创建具有多个级别的汇总表

R 创建具有多个级别的汇总表,r,dplyr,tabular,R,Dplyr,Tabular,我有一个数据,分为高级类别和低级类别。数据的基本结构类似于此模拟数据: set.seed(21) cat <- data.frame(Level1=c(rep("A",6),rep("B",6),rep("C",6)), Level2=c(sample(c(1:3), 6, replace=TRUE), sample(c(4:6), 6, replace=TRUE),

我有一个数据,分为高级类别和低级类别。数据的基本结构类似于此模拟数据:

set.seed(21)
cat <- data.frame(Level1=c(rep("A",6),rep("B",6),rep("C",6)),
                   Level2=c(sample(c(1:3), 6, replace=TRUE), 
                            sample(c(4:6), 6, replace=TRUE), 
                            sample(c(7:9), 6, replace=TRUE)),
                   Type=rep(c(1,2),9),
                   Value=rnorm(18))

> table(cat$Level1,cat$Level2)

  #  1 2 3 4 5 6 7 8 9
  #A 1 3 2 0 0 0 0 0 0
  #B 0 0 0 1 1 4 0 0 0
  #C 0 0 0 0 0 0 1 4 1
我尝试了tables包中的tablar,它可以根据更高级别的分组很好地创建一个包含n、mean、sd等的表。我也尝试过使用不同的分组方式来进行总结,但在同一个表中使用两种分组方式都无法实现任何效果

我在想,也许有一种方法可以在循环过程中一行一行或一块一块地完成,但我不能完全想象这将如何工作


有人见过这样的东西吗

进行两次汇总统计,并将结果添加到一个表中。例如,使用data.table


进行两次汇总统计,并将结果添加到一个表中。例如,使用data.table


您是否尝试过:

    set.seed(21)

    cat <- data.table(Level1=c(rep("A",6),rep("B",6),rep("C",6)),
              Level2=c(sample(c(1:3), 6, replace=TRUE),
                       sample(c(4:6), 6, replace=TRUE),
                       sample(c(7:9), 6, replace=TRUE)),
              Type=rep(c(1,2),9),
              Value=rnorm(18))

    aggregate(Value~Level1+Level2, data=cat, FUN=mean)

您是否尝试过:

    set.seed(21)

    cat <- data.table(Level1=c(rep("A",6),rep("B",6),rep("C",6)),
              Level2=c(sample(c(1:3), 6, replace=TRUE),
                       sample(c(4:6), 6, replace=TRUE),
                       sample(c(7:9), 6, replace=TRUE)),
              Type=rep(c(1,2),9),
              Value=rnorm(18))

    aggregate(Value~Level1+Level2, data=cat, FUN=mean)

这不是期望的输出,不是吗?这不是期望的输出,不是吗?这是一个完美的解决方案。谢谢你的快速回复!这是一个完美的解决方案。谢谢你的快速回复!
> tab
   Level1 Level2 Count       Mean        SD
1:      A     NA     6 -0.2224609 1.1052424
2:      A      1     2 -1.4125934 1.2221462
3:      A      3     4  0.3726054 0.3487678
4:      B     NA     6  0.4125892 0.8841718
5:      B      4     2  1.0854216 0.6030156
6:      B      6     4  0.0761730 0.8538268
7:      C     NA     6 -0.2347908 0.7815174
8:      C      7     4 -0.2805626 0.6948971
9:      C      8     2 -0.1432472 1.2570046
    set.seed(21)

    cat <- data.table(Level1=c(rep("A",6),rep("B",6),rep("C",6)),
              Level2=c(sample(c(1:3), 6, replace=TRUE),
                       sample(c(4:6), 6, replace=TRUE),
                       sample(c(7:9), 6, replace=TRUE)),
              Type=rep(c(1,2),9),
              Value=rnorm(18))

    aggregate(Value~Level1+Level2, data=cat, FUN=mean)
         Level1 Level2      Value
     1      A      1 -1.4125934
     2      A      3  0.3726054
     3      B      4  1.0854216
     4      B      6  0.0761730
     5      C      7 -0.2805626
     6      C      8 -0.1432472