Sehr einfache Frage hier! Auf einem 10 x 2-Datenrahmen möchte ich den Durchschnitt jeder Spalte berechnen und das Ergebnis in eine neue 1 x 2-Matrix setzen.Der effizienteste Weg, eine Matrix von Durchschnittswerten zu erstellen
colmeans
berechnet die Durchschnittswerte, platziert das Ergebnis jedoch in einem 2 x 1-Vektor. Beim Versuch, den Vektor zu transponieren, erscheint die Fehlermeldung "Fehler beim Transponieren (AverageX): l muss eine Liste sein."
Als Workaround erstellte ich eine leere 1 x 2-Matrix (gefüllt mit NAs), dann verwendete rbind
, um den Mittelwertvektor mit der leeren Matrix zusammenzuführen, und löschte dann die NAs.
Es funktioniert, aber ich wette, könnte das gleiche mit zwei Zeilen Code statt vier tun. Hätte jemand einen besseren Weg, dies zu erreichen? Vielen Dank für die Hilfe.
df <- data.frame(Price = c(1219, 1218, 1220, 1216, 1217, 1218, 1218, 1207, 1206, 1205), XXX = c(1218, 1218, 1219, 1218, 1221, 1217 , 1217, 1216, 1219, 1216))
Average <- colMeans(df, na.rm = TRUE) #result is a vector => turn it into a 1xm matrix
AverageMatrix <- matrix(nrow = 1, ncol = 2)
AverageMatrix <- rbind(AverageMatrix, Average)
AverageMatrix<- AverageMatrix[-1, , drop = FALSE]
EDIT: @akrun eine Matrix von Mittelwert zu schaffen und für jede Spalte einer Matrix sind ähnlich technisch noch andere Probleme mit einem durchschnittlichen erstellen, daher meiner Meinung nach ist dies kein Duplikat. Die Frage drückt aus, dass ich bereits wusste, wie man einen Durchschnitt für jede Spalte einer Matrix berechnet, und dass ich eine effizientere Möglichkeit suchte, dieses Ergebnis als Matrix zu speichern, ein einfaches Problem, das in der anderen Frage nicht behandelt wird.
Matrix (Durchschnitt, nrow = 1, ncol = 2)? –
Oder 'Matrix (colmeans (df), 1, 2)'. Beachten Sie, dass Vektoren keine Dimension in R haben. – lmo
'Average <- t (t (colMeans (df, na. rm = TRUE))) '? –