Von einem Datenrahmen, gibt es eine einfache Möglichkeit , aggregieren ( sum
, mean
, max
et c) gleichzeitig mehrere Variablen?
Nachfolgend einige Beispieldaten:
library(lubridate)
days = 365*2
date = seq(as.Date("2000-01-01"), length = days, by = "day")
year = year(date)
month = month(date)
x1 = cumsum(rnorm(days, 0.05))
x2 = cumsum(rnorm(days, 0.05))
df1 = data.frame(date, year, month, x1, x2)
Ich möchte die Variablen x1
und x2
aus dem df2
Datenrahmen gleichzeitig nach Jahr und Monat aggregieren . Der folgende Code aggregiert die x1
Variable, aber ist es auch möglich, die x2
Variable gleichzeitig zu aggregieren ?
### aggregate variables by year month
df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE)
head(df2)
Anregungen wäre sehr dankbar.
recast
Funktion (auch vonreshape2
) integriert diemelt
unddcast
Funktion auf einmal für Aufgaben wie diese:recast(df1, year + month ~ variable, sum, id.var = c("date", "year", "month"))
Ja, in Ihrem
formula
können Siecbind
die numerischen Variablen aggregieren:Siehe
?aggregate
dasformula
Argument und die Beispiele.quelle
.
auf der LHS verwenden.aggregate(. ~ year + month, df1, sum, na.rm = TRUE)
. In diesem Beispiel machtsum
"Datum" allerdings keinen Sinn ...Verwendung des
data.table
Pakets, das schnell ist (nützlich für größere Datensätze)https://github.com/Rdatatable/data.table/wiki
Verwendung des Plyr-Pakets
Verwenden von summarize () aus dem Hmisc-Paket (Spaltenüberschriften sind in meinem Beispiel jedoch unübersichtlich)
quelle
dt[, .(x1.sum = sum(x1), x2.sum = sum(x2), by = c(year, month)
?Mit dem
dplyr
Paket können Sie verwendensummarise_all
,summarise_at
odersummarise_if
Funktionen mehrere Variablen gleichzeitig zu aggregieren. Für den Beispieldatensatz können Sie dies wie folgt tun:Das Ergebnis der beiden letztgenannten Optionen:
Hinweis:
summarise_each
ist für veraltetsummarise_all
,summarise_at
undsummarise_if
.Wie in meinem obigen Kommentar erwähnt , können Sie auch die
recast
Funktion aus demreshape2
-Paket verwenden:das wird Ihnen das gleiche Ergebnis geben.
quelle
Interessanterweise Basis R
aggregate
‚sdata.frame
ist Methode nicht hier zur Schau gestellt , über die Formel - Schnittstelle verwendet wird, so der Vollständigkeit halber:Allgemeinere Verwendung der data.frame-Methode des Aggregats:
Da bieten wir eine
data.frame
alsx
undlist
(data.frame
ist auch alist
) alsby
, dies ist sehr nützlich, wenn wir es dynamisch verwenden müssen, z. B. ist die Verwendung anderer Spalten, die aggregiert und aggregiert werden sollen, sehr einfachZum Beispiel so:
quelle
Weitere Informationen zu einer flexibleren und schnelleren Vorgehensweise bei der Datenaggregation finden Sie in der
collap
Funktion im auf CRAN verfügbaren Collapse R-Paket:Hinweis : Sie können Basisfunktionen wie
mean, max
usw. mit verwendencollap
, aberfmean, fmax
usw. sind C ++ - basierte gruppierte Funktionen, die im Collapse- Paket angeboten werden und erheblich schneller sind (dh die Leistung bei großen Datenaggregationen entspricht der von data.table und bietet gleichzeitig mehr Flexibilität und) Diese schnell gruppierten Funktionen können auch ohne verwendet werdencollap
.Hinweis 2 :
collap
Unterstützt auch die flexible Multitype-Datenaggregation, die Sie natürlich mit demcustom
Argument durchführen können, aber Sie können Funktionen auch halbautomatisch auf numerische und nicht numerische Spalten anwenden:quelle
Spät zur Party, aber vor kurzem einen anderen Weg gefunden, um die zusammenfassende Statistik zu bekommen.
library(psych) describe(data)
Gibt aus: Mittelwert, Min, Max, Standardabweichung, n, Standardfehler, Kurtosis, Schiefe, Median und Bereich für jede Variable.
quelle
describe
macht aber nichts nach Gruppe ...describe.by(column, group = grouped_column)
wird die WerteMit der
devel
Version vondplyr
(version -‘0.8.99.9000’
) können wir auchsummarise
Funktionen auf mehrere Spalten mit anwendenacross
quelle