计算R中矩阵的每列的平均值

时间:2014-02-16 06:13:47

标签: r dataframe mean

我在R工作室的R工作。 我需要计算数据框每列的平均值。

 cluster1  // 5 by 4 data frame
 mean(cluster1) // 

我得到了:

  Warning message:
  In mean.default(cluster1) :
  argument is not numeric or logical: returning NA

但我可以使用

  mean(cluster1[[1]])

获取第一列的平均值。

如何获取所有列的方法?

任何帮助将不胜感激。

8 个答案:

答案 0 :(得分:57)

您可以使用colMeans

### Sample data
set.seed(1)
m <- data.frame(matrix(sample(100, 20, replace = TRUE), ncol = 4))

### Your error
mean(m)
# [1] NA
# Warning message:
# In mean.default(m) : argument is not numeric or logical: returning NA

### The result using `colMeans`
colMeans(m)
#   X1   X2   X3   X4 
# 47.0 64.4 44.8 67.8 

答案 1 :(得分:22)

您可以使用'apply'来运行函数或矩阵或数值数据框的行或列:

cluster1 <- data.frame(a=1:5, b=11:15, c=21:25, d=31:35)

apply(cluster1,2,mean)  # applies function 'mean' to 2nd dimension (columns)

apply(cluster1,1,mean)  # applies function to 1st dimension (rows)

sapply(cluster1, mean)  # also takes mean of columns, treating data frame like list of vectors

答案 2 :(得分:6)

如果你有NA的话:

sapply(data, mean, na.rm = T)      # Returns a vector (with names)   
lapply(data, mean, na.rm = T)      # Returns a list  

请记住,“卑鄙”需要数字数据。如果您有混合类数据,请使用:

numdata<-data[sapply(data, is.numeric)]  
sapply(numdata, mean, na.rm = T)  # Returns a vector
lapply(numdata, mean, na.rm = T)  # Returns a list  

答案 3 :(得分:2)

另一种方法是使用 purrr

# example data like what is said above

@A Handcart和Mohair

set.seed(1)
m <- data.frame(matrix(sample(100, 20, replace = TRUE), ncol = 4))


library(purrr)
means <- map_dbl(m, mean)

> means
#  X1   X2   X3   X4 
#47.0 64.4 44.8 67.8 

答案 4 :(得分:1)

尝试一下!还可以计算NA的数据!

df <- data.frame(a1=1:10, a2=11:20)

df %>% summarise_each(funs( mean( .,na.rm = TRUE)))


# a1   a2
# 5.5 15.5

答案 5 :(得分:1)

class(mtcars)
my.mean <- unlist(lapply(mtcars, mean)); my.mean



   mpg        cyl       disp         hp       drat         wt       qsec         vs 
 20.090625   6.187500 230.721875 146.687500   3.596563   3.217250  17.848750   0.437500 
        am       gear       carb 
  0.406250   3.687500   2.812500 

答案 6 :(得分:0)

对于多样性:另一种方法是将矢量函数转换为使用数据的函数 使用plyr::colwise()

的框架
set.seed(1)
m <- data.frame(matrix(sample(100, 20, replace = TRUE), ncol = 4))

plyr::colwise(mean)(m)


#   X1   X2   X3   X4
# 1 47 64.4 44.8 67.8

答案 7 :(得分:0)

你可以试试这个:

mean(as.matrix(cluster1))