web-dev-qa-db-ja.com

Rの行列の各列の平均を計算します

私は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]])

最初の列の平均を取得します。

すべての列の平均を取得する方法は?

任意の助けをいただければ幸いです。

51
user2420472

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 
60

「適用」を使用して、関数を実行したり、行列または数値データフレームの行または列を実行したりできます。

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
23
bob

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  
6

別の方法は、purrr packageを使用することです

# example data like what is said above

@手押し車とモヘア

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 
2
user6376316

これを試すことができます:

mean(as.matrix(cluster1))
0
weijia

多様性の場合:別の方法は、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
0
Agaz Hussain