我知道这是一个基本问题,但由于一些奇怪的原因,我无法找到答案。
我应该如何在整个数组,矩阵或数据帧上应用基本统计函数(如均值,中位数等)来获得唯一答案,而不是行或列上的向量
答案 0 :(得分:23)
由于这个问题很明显,我会更全面地对待它,包括'等等'除mean
和median
之外的其他内容。
对于矩阵或数组,正如其他人所说,mean
和median
将返回单个值。但是,var
将计算二维矩阵的列之间的协方差。有趣的是,对于多维数组,var
返回返回单个值。二维矩阵上的sd
可以使用,但不推荐使用,返回列的标准偏差。更好的是,mad
在二维矩阵和多维数组上返回单个值。如果您想要返回单个值,则最安全的路线是首先使用as.vector()
强制执行。玩得开心吗?
对于data.frame
,不推荐使用mean
,但会再次单独对列进行操作。 median
要求您首先强制转换为向量,或unlist
。与以前一样,var
将返回协方差,sd
将再次弃用,但会返回列的标准偏差。 mad
要求您强制使用向量或unlist
。一般情况下,对于data.frame
,如果您想要对所有值执行操作,通常只需先unlist
。
编辑:最新消息():在R 3.0.0中,mean.data.frame被解除声明:
o mean() for data frames and sd() for data frames and matrices are
defunct.
答案 1 :(得分:14)
默认情况下,mean
和median
等可以处理整个数组或矩阵。
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