Ich versuche, mehrere zusammenfassende Statistiken in R / S-PLUS in einer Aufnahme nach kategorialen Spalten zu gruppieren. Ich habe einige Funktionen gefunden, aber alle führen eine Statistik pro Aufruf aus, z. B. `aggregat ().
data <- c(62, 60, 63, 59, 63, 67, 71, 64, 65, 66, 68, 66,
71, 67, 68, 68, 56, 62, 60, 61, 63, 64, 63, 59)
grp <- factor(rep(LETTERS[1:4], c(4,6,6,8)))
df <- data.frame(group=grp, dt=data)
mg <- aggregate(df$dt, by=df$group, FUN=mean)
mg <- aggregate(df$dt, by=df$group, FUN=sum)
Was ich suche, ist, mehrere Statistiken für dieselbe Gruppe wie Mittelwert, Min, Max, Standard, ... usw. in einem Anruf zu erhalten. Ist das machbar?
data <- c(
Zeile steht ein zusätzliches Komma .Antworten:
Ich werde meine zwei Cent für setzen
tapply()
.Sie können eine benutzerdefinierte Funktion mit den spezifischen Statistiken schreiben, die Sie als Zusammenfassung ersetzen möchten.
quelle
summary
:tapply(df$dt, df$group, function(x) format(summary(x), scientific = TRUE))
Das dplyr- Paket könnte eine gute Alternative zu diesem Problem sein:
library(dplyr) df %>% group_by(group) %>% summarize(mean = mean(dt), sum = sum(dt))
1. Quadrant und 3. Quadrant erhalten
df %>% group_by(group) %>% summarize(q1 = quantile(dt, 0.25), q3 = quantile(dt, 0.75))
quelle
Mit Hadley Wickhams Purrr-Paket ist dies ganz einfach. Verwenden Sie
split
diese Option , um die übergebenendata_frame
Gruppen aufzuteilen , undmap
wenden Sie dann diesummary
Funktion auf jede Gruppe an.quelle
tapply
Ansatz unter Verwendung der Basis R.Es gibt viele verschiedene Möglichkeiten, dies zu tun, aber ich bin Teil
describeBy
despsych
Pakets:describeBy(df$dt, df$group, mat = TRUE)
quelle
Schauen Sie sich das
plyr
Paket an. Speziell,ddply
ddply(df, .(group), summarise, mean=mean(dt), sum=sum(dt))
quelle
Nach 5 langen Jahren werde ich sicher nicht viel Aufmerksamkeit für diese Antwort erhalten, aber um alle Optionen zu vervollständigen, hier ist die mit
data.table
library(data.table) setDT(df)[ , list(mean_gr = mean(dt), sum_gr = sum(dt)) , by = .(group)] # group mean_gr sum_gr #1: A 61 244 #2: B 66 396 #3: C 68 408 #4: D 61 488
quelle
Außerdem
describeBy
ist dasdoBy
Paket eine weitere Option. Es bietet einen Großteil der Funktionen von SAS PROC SUMMARY. Details: http://www.statmethods.net/stats/descriptives.htmlquelle
freq
Funktion imdescr
Paket. Das ist nicht genau das, wonach Sie gefragt haben, aber es kann dennoch lehrreich sein. Details: rdocumentation.org/packages/descr/functions/freqWährend einige der anderen Ansätze funktionieren, entspricht dies ziemlich genau dem, was Sie getan haben, und verwendet nur Basis r. Wenn Sie den Aggregatbefehl kennen, ist dies möglicherweise intuitiver.
with( df , aggregate( dt , by=list(group) , FUN=summary) )
quelle
Das
psych
Paket bietet eine großartige Option für gruppierte Zusammenfassungsstatistiken:library(psych) describeBy(dt, group="grp")
erzeugt viele nützliche Statistiken, einschließlich Mittelwert, Median, Bereich, SD, SE.
quelle
Erstens hängt es von Ihrer Version von R ab. Wenn Sie 2.11 bestanden haben, können Sie aggreggate mit mehreren Ergebnisfunktionen (Zusammenfassung, nach Instanz oder Ihrer eigenen Funktion) verwenden. Wenn nicht, können Sie die Antwort von Justin verwenden.
quelle