我有一个分类为高级别类别和低级别类别的数据。数据的基本结构与此模拟类似:
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()
等进行分组,但是无法在同一个表中使用两种分组方式。
我在想,或许有一种方法可以在循环过程中逐行或逐块地进行,但是我无法想象它是如何工作的。
有没有人见过这样的东西?
答案 0 :(得分:5)
执行两次摘要统计,并将结果添加到一个表中。例如,使用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
答案 1 :(得分:-1)
您是否尝试过aggregate():
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