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

时间:2012-02-24 01:56:13

标签: arrays r matrix dataframe r-faq

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

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

3 个答案:

答案 0 :(得分:23)

由于这个问题很明显,我会更全面地对待它,包括'等等'除meanmedian之外的其他内容。

  1. 对于矩阵或数组,正如其他人所说,meanmedian将返回单个值。但是,var将计算二维矩阵的列之间的协方差。有趣的是,对于多维数组,var返回返回单个值。二维矩阵上的sd可以使用,但不推荐使用,返回列的标准偏差。更好的是,mad在二维矩阵多维数组上返回单个值。如果您想要返回单个值,则最安全的路线是首先使用as.vector()强制执行。玩得开心吗?

  2. 对于data.frame,不推荐使用mean,但会再次单独对列进行操作。 median要求您首先强制转换为向量,或unlist。与以前一样,var将返回协方差,sd将再次弃用,但会返回列的标准偏差。 mad要求您强制使用向量或unlist。一般情况下,对于data.frame,如果您想要对所有值执行操作,通常只需先unlist

  3. 编辑:最新消息():在R 3.0.0中,mean.data.frame被解除声明:

    o   mean() for data frames and sd() for data frames and matrices are
    defunct.
    

答案 1 :(得分:14)

默认情况下,meanmedian等可以处理整个数组或矩阵。

E.g:

# 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.

在强制转换为矩阵之前,请注意您的数据框包含所有数字列。或者排除非数字的。

答案 2 :(得分:0)

您可以先通过install.packages('dplyr')使用library dplyr,然后

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