Je travaille sur R in R studio . Je dois calculer la moyenne pour chaque colonne d'un bloc de données.
cluster1 // 5 by 4 data frame
mean(cluster1) //
J'ai eu :
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.
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
Vous pouvez utiliser 'apply' pour exécuter une fonction ou les lignes ou colonnes d'une matrice ou d'un bloc de données numériques:
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
Si vous avez des NA:
sapply(data, mean, na.rm = T) # Returns a vector (with names)
lapply(data, mean, na.rm = T) # Returns a list
Rappelez-vous que "moyen" a besoin de données numériques. Si vous avez mélangé des données de classe, 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
Une autre façon consiste à utiliser purrr package
# example data like what is said above
@A charrette à bras et 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
Vous pouvez essayer ceci:
mean(as.matrix(cluster1))
Pour la diversité: Une autre méthode consiste à convertir une fonction vectorielle en une fonction utilisant des données Images à l'aide de 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