给定数据框(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
我想要testA和testB的描述性统计(mean和sd)用于分组变量Hup和Hop。我想要这样的事情。
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的结果。
问:如何为具有多个变量的多个组生成描述性统计数据?
答案 0 :(得分: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
答案 1 :(得分:2)
对于显示,我认为来自tabular
包的tables
函数最简单:
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语法输出表。