Ich arbeite an R in R. studio . Ich muss den Mittelwert für jede Spalte eines Datenrahmens berechnen.
cluster1 // 5 by 4 data frame
mean(cluster1) //
Ich habe :
Warning message:
In mean.default(cluster1) :
argument is not numeric or logical: returning NA
Aber ich kann verwenden
mean(cluster1[[1]])
um den Mittelwert der ersten Spalte zu erhalten.
Wie bekomme ich Mittel für alle Spalten?
Jede Hilfe wäre dankbar.
Sie können colMeans
verwenden:
### 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
Sie können 'apply' verwenden, um eine Funktion oder die Zeilen oder Spalten einer Matrix oder eines numerischen Datenrahmens auszuführen:
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
Falls Sie NA haben:
sapply(data, mean, na.rm = T) # Returns a vector (with names)
lapply(data, mean, na.rm = T) # Returns a list
Denken Sie daran, dass "Mittelwert" numerische Daten benötigt. Wenn Sie gemischte Klassendaten haben, verwenden Sie:
numdata<-data[sapply(data, is.numeric)]
sapply(numdata, mean, na.rm = T) # Returns a vector
lapply(numdata, mean, na.rm = T) # Returns a list
Eine andere Möglichkeit ist die Verwendung von purrr package
# example data like what is said above
@ Ein Handwagen und 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
Sie können dies versuchen:
mean(as.matrix(cluster1))
Für Vielfalt: Eine andere Möglichkeit besteht darin, eine Vektorfunktion in eine zu konvertieren, die mit Daten arbeitet Frames mithilfe von 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