Z ramki danych, istnieje łatwy sposób agregować ( sum
, mean
, max
et c) wielu zmiennych jednocześnie?
Poniżej kilka przykładowych danych:
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)
Chciałbym jednocześnie agregować zmienne x1
i x2
z df2
danych w ujęciu rocznym i miesięcznym. Poniższy kod agreguje x1
zmienną, ale czy można jednocześnie agregować x2
zmienną?
### aggregate variables by year month
df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE)
head(df2)
Wszelkie sugestie będą mile widziane.
recast
Funkcji (również zreshape2
) integrujemelt
idcast
funkcji w jednej porcji do zadań takich jak to:recast(df1, year + month ~ variable, sum, id.var = c("date", "year", "month"))
Tak, w Twoim
formula
możeszcbind
zagregować zmienne numeryczne:Zobacz
?aggregate
,formula
argument i przykłady.źródło
.
na LHS.aggregate(. ~ year + month, df1, sum, na.rm = TRUE)
. W tym przykładziesum
Korzystanie z
data.table
pakietu, który jest szybki (przydatny w przypadku większych zbiorów danych)https://github.com/Rdatatable/data.table/wiki
Korzystanie z pakietu plyr
Używanie summarize () z pakietu Hmisc (chociaż w moim przykładzie nagłówki kolumn są niechlujne)
źródło
dt[, .(x1.sum = sum(x1), x2.sum = sum(x2), by = c(year, month)
?Z
dplyr
pakietu można użyćsummarise_all
,summarise_at
lubsummarise_if
funkcje agregacji wielu zmiennych jednocześnie. W przypadku przykładowego zbioru danych możesz to zrobić w następujący sposób:Wynik dwóch ostatnich opcji:
Uwaga:
summarise_each
jest zastąpionasummarise_all
,summarise_at
asummarise_if
.Jak wspomniano w moim komentarzu powyżej , możesz również użyć
recast
funkcji zreshape2
pakietu:co da ten sam wynik.
źródło
Co ciekawe, zasady R
aggregate
„sdata.frame
metody nie są prezentowane tu powyżej interfejs wzór stosować więc dla kompletności:Bardziej ogólne użycie metody data.frame agregatu:
Ponieważ zapewniamy
data.frame
tak jakx
ilist
(data.frame
jest również alist
) jakoby
jest to bardzo przydatne, jeśli potrzebujemy go używać w sposób dynamiczny, np. użycie innych kolumn do agregacji i agregacji według jest bardzo prosteNa przykład tak:
źródło
W
devel
wersjidplyr
(wersja -‘0.8.99.9000’
) możemy równieżsummarise
zastosować funkcję do wielu kolumn za pomocąacross
źródło
Aby uzyskać bardziej elastyczne i szybsze podejście do agregacji danych, sprawdź
collap
funkcję w pakiecie collapse R dostępnym w CRAN:Uwaga : Możesz używać funkcji podstawowych, takich jak
mean, max
itp. Zcollap
, alefmean, fmax
itp. Są funkcjami grupowanymi opartymi na C ++ oferowanymi w pakiecie zwijania , które są znacznie szybsze (tj. Wydajność w przypadku dużych agregacji danych jest taka sama jak data.table , zapewniając jednocześnie większą elastyczność, oraz te szybko zgrupowane funkcje mogą być również używane bezcollap
).Uwaga 2 :
collap
obsługuje również elastyczną agregację danych typu multitype, którą można oczywiście wykonać za pomocącustom
argumentu, ale można również zastosować funkcje do kolumn liczbowych i nienumerycznych w sposób półautomatyczny:źródło
Spóźniłem się na imprezę, ale ostatnio znalazłem inny sposób na podsumowanie statystyk.
library(psych) describe(data)
Wyświetli: średnią, minimalną, maksymalną, odchylenie standardowe, n, błąd standardowy, kurtozy, skośność, medianę i zakres dla każdej zmiennej.
źródło
describe
nie robi nic według grup ...describe.by(column, group = grouped_column)