【问题标题】:Descriptive Statistics by Group for multiple variables多变量组的描述性统计
【发布时间】:2014-02-27 19:50:19
【问题描述】:

给定数据框(df)

Hup Hop testA   testB
Y   Hi  1   1
N   Lo  2   2
Y   Mi  3   3
N   No  4   4
Y   Hi  5   5
N   Lo  6   6
Y   Mi  7   7
N   No  8   8
Y   Hi  9   9
N   Lo  10  10
Y   Mi  11  11
N   No  12  12

我想要分组变量 Hup 和 Hop 的 testA 和 testB 的描述性统计数据(平均值和标准差)。我想要这样的东西。

hup testA.mean  testA.sd    testB.mean  testB.sd
y   7            3.742            7      3.742
n   6            3.742            6      3.742
hop testA.mean  testA.sd    testB.mean  testB.sd
hi  etc           Etc            etc       Etc
lo  etc           Etc            etc       Etc
mi  etc           Etc            etc       Etc

使用例如ddply(df,~hup,summarise,mean=round(mean(testA),3),sd=round(sd(testA),3)) 可以解决部分问题。但我想加快进程:学习如何使用 R。所以,我想:

lapply(df[ , c("testA", "testB")], function(x){ ddply(df, ~df[ , c("hup")], function(x) {mean(x)} )})

这不起作用,它返回 NA,错过 SD 并仅报告 hup 的结果。

问:如何为具有多个变量的多个组生成描述性统计数据?

【问题讨论】:

  • 查看aggregate(testA~Hup+Hop, df, mean)

标签: r


【解决方案1】:

对于显示我认为tables 包中的tabular 函数最简单:

library(tables)
tabular(Hup + Hop ~ (testA + testB)*((n = 1) + mean + sd), data = df)
##       testA         testB        
##       mean  sd    n mean  sd    n
##Hup N  7     3.742 6 7     3.742 6
##    Y  6     3.742 6 6     3.742 6
##Hop Hi 5     4.000 3 5     4.000 3
##    Lo 6     4.000 3 6     4.000 3
##    Mi 7     4.000 3 7     4.000 3
##    No 8     4.000 3 8     4.000 3

U 也可以将tabular() 对象包装在latex() 中,以LaTeX 语法输出表格。

【讨论】:

  • 谢谢@adibender,看来tables 是我一直在寻找的包。在大量提供的软件包中,很难找到合适的(最佳)软件包来解决问题。谢谢!
【解决方案2】:
library(reshape2)
library(plyr)

dfm <- melt(df, id.vars = c("Hup", "Hop"))

splits <- list(.(Hup, variable), .(Hop, variable))
## or something like
## splits <- data.frame(rbind(head(names(dfm), -2), "variable")) 
lapply(splits, ddply, .data = dfm, .fun = summarize, mean = mean(value), sd = sd(value))

## [[1]]
##   Hup variable mean       sd
## 1   N    testA    7 3.741657
## 2   N    testB    7 3.741657
## 3   Y    testA    6 3.741657
## 4   Y    testB    6 3.741657

## [[2]]
##   Hop variable mean sd
## 1  Hi    testA    5  4
## 2  Hi    testB    5  4
## 3  Lo    testA    6  4
## 4  Lo    testB    6  4
## 5  Mi    testA    7  4
## 6  Mi    testB    7  4
## 7  No    testA    8  4
## 8  No    testB    8  4

【讨论】:

  • splits 选项与lapplyddply 给了我一个新的见解,感谢@Jake Burkhead。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 2022-08-06
  • 1970-01-01
  • 2018-05-12
相关资源
最近更新 更多