如何获取整个矩阵、数组或数据帧的平均值、中位数和其他统计数据?

How to get mean, median, and other statistics over entire matrix, array or dataframe?

提问人:user2760 提问时间:2/24/2012 最后编辑:zx8754user2760 更新时间:10/22/2018 访问量:94357

问:

我知道这是一个基本问题,但由于某种奇怪的原因,我无法找到答案。

我应该如何在整个数组、矩阵或数据帧上应用基本的统计函数,如平均值、中位数等,以获得唯一的答案,而不是行或列上的向量

数组 矩阵 数据帧 R-FAQ

评论


答:

18赞 mathematical.coffee 2/24/2012 #1

默认情况下,等等对整个数组或矩阵起作用。meanmedian

例如:

# array:
m <- array(runif(100),dim=c(10,10))
mean(m) # returns *one* value.

# matrix:
mean(as.matrix(m)) # same as before

对于数据帧,您可以先将它们强制转换为矩阵(默认情况下,这是列的原因是,数据帧中可以包含包含字符串的列,而您不能取其平均值):

# data frame
mdf <- as.data.frame(m)
# mean(mdf) returns column means
mean( as.matrix(mdf) ) # one value.

请注意,在强制转换为矩阵之前,您的 DataFrame 具有所有数值列。或者排除非数字的。

评论

1赞 smci 7/20/2012
但是对于数据帧,并且不能按原样工作。正如您所指出的,由于非数字列,将 df 强制转换为矩阵将出现错误(因此您必须创建一个列索引才能仅接触数字列)。(此外,如果数据帧很大,则使用 - big 临时变量进行转换效率不高或不可扩展)。meanmedianas.matrix(mdf)
32赞 joran 2/24/2012 #2

由于这个问题出现了相当多的问题,我将更全面地处理这个问题,除了 和 之外,还包括 'etc.' 部分。meanmedian

  1. 对于矩阵或数组,正如其他人所说,并将返回单个值。但是,将计算二维矩阵各列之间的协方差。有趣的是,对于多维数组,返回返回单个值。 在二维矩阵上将起作用,但已弃用,返回列的标准偏差。更好的是,在二维矩阵多维数组上返回单个值。如果要返回单个值,最安全的方法是强制使用 first。玩得开心了吗?meanmedianvarvarsdmadas.vector()

  2. 对于 ,已弃用,但将再次单独作用于列。 要求您先强制转换为向量,或者 .和以前一样,将返回协方差,并再次被弃用,但将返回列的标准差。 要求您强制转换为向量或 .一般来说,如果你想让某件事作用于所有值,你通常会先这样做。data.framemeanmedianunlistvarsdmadunlistdata.frameunlist

编辑:最新突发新闻():在 R 3.0.0 中,mean.data.frame 已失效:

o   mean() for data frames and sd() for data frames and matrices are
defunct.
4赞 tcratius 10/22/2018 #3

你可以通过 install.packages('dplyr') 使用library dplyr

dataframe.mean <- dataframe %>%
  summarise_all(mean) # replace for median