将多个函数应用于单个数据对象 - 自定义摘要统计信息

时间:2016-07-07 11:10:44

标签: r

我们如何计算每列基质M的描述性汇总统计数据,包括平均值,标准差以及5%,25%,50%,75%和95%分位数?

这就是我如何独立完成不同的摘要统计:

library(magrittr)    
s_1 = M %>% apply(.,2, mean)
s_2 = M %>% apply(.,2, sd)
s_3 = M %>% apply(.,2, quantiles, c(0.05,0.25,0.5,0.75,0.95))
result = cbind(s_1, s_2, s_3)

理想情况下,我希望将此功能包装成一个易于理解且易于维护的功能。

2 个答案:

答案 0 :(得分:3)

我们可以使用dplyr

执行此操作
library(dplyr)
M %>%
   as.data.frame() %>% 
   summarise_each(funs(Mean = mean, SD = sd, 
             list(Quantile = quantile(., c(0.05,0.25,0.5,0.75,0.95))))) 

数据

set.seed(24)
M <- matrix(rnorm(30, 30), ncol=3)

答案 1 :(得分:1)

这是基础R中的一个自定义函数,可以解决这个问题。这些非常简单,可以构建和更改以适应您想要的任何统计数据:

myStats <- function(x) {
  myMean <- mean(x)
  mySd <- sd(x)
  myQuantiles <- quantile(x, probs=c(0.05,0.25,0.5,0.75,0.95))

  return(c(mean=myMean, sd=mySd, myQuantiles))
}

现在,让我们测试一下

# get some data
set.seed(1234)
x <- rnorm(100)

 myStats(x)
      mean         sd         5%        25%        50%        75%        95% 
-0.1567617  1.0044053 -1.3935761 -0.8953272 -0.3846280  0.4712061  1.7095200

如评论中的OP所述,可以在apply系列中使用此函数来计算多个变量的这些统计数据。例如,对于data.frame,df包含第3列及以上的数据(以及第1列和第2列中的ID变量),您可以使用sapply返回每列的统计矩阵:

sapply(df[,-c(1,2)], myStats)