我们如何计算每列基质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)
理想情况下,我希望将此功能包装成一个易于理解且易于维护的功能。
答案 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)