我有一个数据,分为高级别类别和低级别类别.数据的基本结构与此模拟类似:
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
如果可能的话,我想在层次结构中创建一个包含Level1和Level2的计数和均值(或其他摘要)的表,如下所示:
#Level1/2 Count Mean SD ... whatever #A 6 0.15323278 # 1 1 -0.5821507 # 2 3 0.8603706 # 3 2 -0.5397822 #B 6 0.46460457 # 4 1 1.0136847 # 5 1 -0.3521069 # 6 4 0.5315124...
我试过tabular()
了这个tables
包 - 它可以很好地创建一个基于更高级别分组的n,mean,sd等表.我也尝试使用各种分组方式进行汇总,group_by()
但是在同一个表中使用2种分组方法无法做任何事情.
我在想,也许有一种方法可以在循环过程中逐行或逐块地进行,但我无法想象它是如何工作的.
有没有人见过这样的东西?
执行两次摘要统计,并将结果添加到一个表中.例如,用data.table
.
require(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)) cat table(cat$Level1, cat$Level2) # Statistics for Level1 tab1 <- cat[, .(Count = .N, Mean = mean(Value), SD = sd(Value)), keyby = .(Level1)] # Statistics for Level1 and Level2 tab2 <- cat[, .(Count = .N, Mean = mean(Value), SD = sd(Value)), keyby = .(Level1, Level2)] # Add in one table tab <- rbindlist(list(tab2, tab1), fill = TRUE) # Sort setorder(tab, Level1, Level2) # Print tab
结果:
> 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