列表中多个数据帧的摘要统计信息

B. *_*vis 6 r function list

如果我有这个清单

set.seed(123)
thelist <- list(a=data.frame(x1=rnorm(10), x2=rnorm(10)),
                b=data.frame(x1=rnorm(10), x2=rnorm(10)),
                c=data.frame(x1=rnorm(10), x2=rnorm(10)))
Run Code Online (Sandbox Code Playgroud)

并且想要使用以下代码计算每个列表中每列的平均值.

sapply(do.call("rbind",thelist),mean)
Run Code Online (Sandbox Code Playgroud)

我怎样才能为每个列表中的每一列(a:c)计算标准偏差,因为sd没有等效函数(至少据我所知)?

任何建议将不胜感激.

Ren*_*rop 5

基本的R解决方案将使用sapply两次.

仅限于平均值:

t(sapply(thelist, sapply, mean))
Run Code Online (Sandbox Code Playgroud)

导致

            x1        x2
a  0.074625644 0.2086220
b -0.424558873 0.3220446
c -0.008715537 0.2216860
Run Code Online (Sandbox Code Playgroud)

如果你想要两个:

my_summary <- function(x){
  c(mean = mean(x), sd = sd(x))
}

as.data.frame(lapply(thelist, sapply, my_summary))
Run Code Online (Sandbox Code Playgroud)

导致:

           a.x1     a.x2       b.x1      b.x2         c.x1      c.x2
mean 0.07462564 0.208622 -0.4245589 0.3220446 -0.008715537 0.2216860
sd   0.95378405 1.038073  0.9308092 0.5273024  1.082518163 0.8564451
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.最后我想要CI.提供您的功能是完美的.我能够将它修改为'my_summary < - function(x){c(mean = mean(x),UpperCI = mean(x)+(1.96*sd(x)),LowerCI = mean(x)+(1.96)*sd(x)))'}.这非常有效.谢谢你的新技巧. (3认同)