2017-06-28 2 views
0

Ich habe ein Problem bezüglich Sapply in R:
Ich habe ein Datenframe Test_ALL, die ich durch (zur Zeit) eine Spalte namens Aktivität geteilt. Der Datenrahmen hat ungefähr 20 Spalten mit extra langen Namen (z. B. fBodyBodyGyroJerkMag-std()), die ich nicht explizit aufschreiben möchte. Von diesem Datenrahmen möchte ich für jede Spalte einen Mittelwert erhalten. Ich habe es versucht und es funktionierte für 1 benannte Spalte.R sapply und bedeuten für mehr als 1 Spalte im geteilten Datenframe

aa<-split(Test_ALL,Test_ALL$activity) 
y<-sapply(aa,function(x) colMeans(x [c("fBodyBodyGyroJerkMag-std()")])) 

aber wenn ich versuchte, einen Mittelwert für mehr als 1 Spalte zu bekommen, hat es nicht funktioniert.

aa<-split(Test_ALL,Test_ALL$activity) 
y<-sapply(aa,function(x) colMeans(x [c("fBodyBodyGyroJerkMag-std()","fBodyAccMag-std()")])) 

Ich habe versucht, zu diesem, aber auch kein Erfolg

namesERG<-names(Test_ALL) 
aa<-split(Test_ALL,Test_ALL$activity) 
y<-sapply(aa,function(x) colMeans(x[c(namesERG)])) 

Was mache ich falsch? Thak du!

+0

Würde nicht 'sapply (aa, Funktion (x) colMeans (x [-1])' Arbeit für alle Spalten? - Sie keine Daten lieferten so Ich kann nicht überprüfen – Sotos

+0

Was ist die Ausgabe? Was haben Sie erwartet? Haben Sie versucht aggregiert? Etwas in Richtung der Aggregate (. ~ Aktivität, Daten = Test_ALL) '. –

+0

Ich versuchte Sotos Vorschlag, aber ich bekomme das Fehler: Fehler in colMeans (x [-1]): 'x' muss numerisch sein - Test_ALL ist ein Datenrahmen, Test_ALL [1,1] zum Beispiel ist numerisch, aa ist eine Liste – user3443063

Antwort

1

Ohne ein reproduzierbares Beispiel ist es schwierig, Ihr Problem vollständig zu verstehen. Jedenfalls denke ich, dass ein Teil des Problems mit der Tatsache zusammenhängt, dass Sie einige nicht numerische Spalten haben. Ich denke, dass so somenthing eine Lösung sein könnte

library(dplyr) 
aa <- split(Test_ALL, Test_ALL$activity) 
y <- sapply(aa, function(x) colMeans(select_if(x, is.numeric))) 
Verwandte Themen