Teile diesen Beitrag:

Hej Leute,

heute stelle ich Euch die supernützliche R-Funktion aggregate vor.

 

Die Funktion aggregate aggregiert Werte mittels einer frei wählbaren Funktion nach Gruppen. Ok, klingt immer noch kompliziert, ist aber eigentlich ganz simpel. Ich teile einen Datensatz in verschiedene Teilmengen (z.B. Altersklassen) und berechne innerhalb jeder Teilmenge eine Kennzahl (z.B. Mittelwert). Denken wir das Beispiel zu Ende, könnten wir die mittlere Körpergröße nach Altersklasse berechnen

aggregate(Körpergröße~Alterklasse, Datensatz, mean)

Wer mit SQL vertraut ist, der kann an group by denken.

Das Konzept ist extrem flexibel, denn erstens können wir beliebige Formeln zur Gruppierung verwenden, zum anderen kann die Aggregat-Funktion völlig frei definiert werden.

Ich verwende den aggregate-Befehl ständig, z.B. wenn ich mehrere Datensätze zu einem Kunden habe und den ersten/letzten/größten/kleinsten/… Wert einer Variable haben möchte.

 

Hier ein paar Beispiele, die die Funktionsweise zeigen:

#Datensatz erzeugen
n=1000
df <- data.frame(id=1:n,Alter=runif(n,0,100),x=rnorm(n))
df$Klasse=ifelse(df$x>0,"positiv","negativ")
df$Erwachsene = ifelse(df$Alter>=18,"ja","nein")
 
#einfaches Minimum nach Klasse
aggregate(x~Klasse,df,FUN=min)
 
#Anzahl Elemente nach Ausprägungen
aggregate(x~Klasse+Erwachsene,df,FUN=length)
 
#eigene Funktion: Mittelwert - 2*Standardabweichung
aggregate(x~Klasse+Erwachsene,df,FUN=function(x) {return(mean(x)-2*sd(x))})
 
#Funktion vorher deklarieren: diese muss aus einem Vektor einen Wert aggregieren
myFunc <- function(x) {
#Berechne die Anzahl Elemente, welche die Zeichenfolge 12 enthalten
return(sum(grepl("12",x)))
}
aggregate(x~Klasse+Erwachsene,df,FUN=myFunc)

Viel Spaß beim Ausprobieren!

 

P.S.: Schaut doch mal bei der Data Science Deutschland Facebookgruppe vorbei.

Teile diesen Beitrag: