calculer la moyenne pour chaque colonne D'une matrice en R
je travaille sur R In R studio. Je dois calculer la moyenne pour chaque colonne d'une base de données.
cluster1 // 5 by 4 data frame
mean(cluster1) //
j'ai :
Warning message:
In mean.default(cluster1) :
argument is not numeric or logical: returning NA
Mais je peux utiliser
mean(cluster1[[1]])
pour obtenir la moyenne de la première colonne.
Comment obtenir des moyens pour toutes les colonnes ?
Toute aide serait appréciée.
42
demandé sur
Roman Luštrik
2014-02-16 10:13:46
6 réponses
Vous pouvez utiliser 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
50
répondu
A5C1D2H2I1M1N2O1R2T1
2014-02-16 06:15:17
Vous pouvez utiliser 'appliquer' pour exécuter une fonction ou les lignes ou les colonnes d'une matrice ou de données numériques de châssis:
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
19
répondu
bob
2014-02-16 07:30:51
Dans le cas où vous avez de NA:
sapply(data, mean, na.rm = T) # Returns a vector (with names)
lapply(data, mean, na.rm = T) # Returns a list
rappelez-vous que le" moyen " nécessite des données numériques. Si vous avez mélangé les données de la classe, puis utilisez:
numdata<-data[sapply(data, is.numeric)]
sapply(numdata, mean, na.rm = T) # Returns a vector
lapply(numdata, mean, na.rm = T) # Returns a list
4
répondu
Gonzalo user7334982
2017-01-23 15:34:40
Pour la diversité: une Autre façon est d'convertit un vecteur fonction de celui qui fonctionne avec des données
cadres en utilisant 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
répondu
Aaghaz Hussain
2018-03-04 15:42:28