Ich habe eine data.frame mit vielen Spalten (~ 50). Einige von ihnen sind Zeichen, einige sind numerisch und 3 von denen verwende ich für die Gruppierung.R: zusammenfassen mehrere Spalte (numerisch, Zeichen) und entfernen NA
Ich muss:
- entfernen NAs von numerischen Spalten
- berechnen den Mittelwert von jeder der numerischen Spalten
- extrahieren das erste Element der Zeichenspalten
Nehmen wir an, wir verwenden modifizierte Irisdaten wie folgt:
data(iris)
iris$year <- rep(c(2000,3000),each=25) ## for grouping
iris$color <- rep(c("red","green","blue"),each=50) ## character column
iris[1,] <- NA ## introducing NAs
Ich habe ~ 50 Spalten insgesamt, numerische und Zeichen zusammen gemischt. Ich habe versucht worden, so etwas wie:
giris <- group_by(iris, Species, year)
cls <- unlist(sapply(giris, class)) ## find out classes
action <- ifelse(cls == "numeric", "mean", "first")
action <- paste(action)
summarise_each(giris, action)
Was ich erhalte, ist für alle Spalten in einer Gruppe von Spalten mit den ersten Werten in jeweiliger Gruppe gefolgt bedeutet. Und NAs werden nicht behandelt ... Was ist nicht genau das, was ich suche ...
Helfen Sie jemandem?
Ich denke, Sie möchten 'na.omit()' oberhalb der 'group_by' hinzufügen, aber das ist der Kern der Frage. – JasonAizkalns
@JasonAizkalns, ich denke nicht - das würde möglicherweise viele Zeilen entfernen, die aufbewahrt werden sollten. Aber ich stimme zu, dass ein 'Filter (! Is.na (Species) &! Is.na (year))' Sinn machen würde –
Dies ist eine wirklich nette und (wichtigste) Arbeitslösung, die auch erlaubt, einen Blick darauf zu erhaschen geht unter die Haube von summarise_each. Ich bin wirklich, wirklich dankbar dafür, Doncendo :-). Denken Sie gleichzeitig, dass es einen Weg geben könnte, um es zu beschleunigen? – rpl