Dari data frame, apakah ada cara mudah untuk agregat ( sum
, mean
, max
et c) beberapa variabel secara bersamaan?
Berikut adalah beberapa contoh data:
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)
Saya ingin secara bersamaan mengumpulkan x1
dan x2
variabel dari df2
bingkai data berdasarkan tahun dan bulan. Kode berikut mengagregasi x1
variabel, tetapi apakah mungkin juga untuk secara bersamaan mengagregasi x2
variabel?
### aggregate variables by year month
df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE)
head(df2)
Setiap saran akan sangat dihargai.
recast
function (juga darireshape2
) mengintegrasikanmelt
dandcast
fungsi dalam satu pergi untuk tugas-tugas seperti ini:recast(df1, year + month ~ variable, sum, id.var = c("date", "year", "month"))
Ya, di Anda
formula
, Anda dapatcbind
menjumlahkan variabel numerik:Lihat
?aggregate
,formula
argumen dan contohnya.sumber
.
pada LHS.aggregate(. ~ year + month, df1, sum, na.rm = TRUE)
. Dalam contoh ini,sum
untuk "date" tidak masuk akal ....Menggunakan
data.table
paket, yang cepat (berguna untuk kumpulan data yang lebih besar)https://github.com/Rdatatable/data.table/wiki
Menggunakan paket plyr
Menggunakan ringkasan () dari paket Hmisc (judul kolom berantakan pada contoh saya)
sumber
dt[, .(x1.sum = sum(x1), x2.sum = sum(x2), by = c(year, month)
?Dengan
dplyr
paket, Anda dapat menggunakansummarise_all
,summarise_at
atausummarise_if
fungsi untuk menggabungkan beberapa variabel secara bersamaan. Untuk dataset contoh, Anda dapat melakukan ini sebagai berikut:Hasil dari dua opsi terakhir:
Catatan:
summarise_each
tidak digunakan lagi untuksummarise_all
,summarise_at
dansummarise_if
.Seperti disebutkan dalam komentar saya di atas , Anda juga dapat menggunakan
recast
fungsi darireshape2
-paket:yang akan memberi Anda hasil yang sama.
sumber
Menariknya, basis R
aggregate
'sdata.frame
metode tidak dipamerkan di sini, di atas antarmuka rumus yang digunakan, sehingga untuk kelengkapan:Penggunaan metode data.frame agregat yang lebih umum:
Karena kami menyediakan a
data.frame
sebagaix
danlist
(data.frame
juga alist
) sebagaiby
, ini sangat berguna jika kita perlu menggunakannya secara dinamis, misalnya menggunakan kolom lain untuk diagregasi dan untuk diagregasi dengan sangat sederhanaMisalnya seperti ini:
sumber
Dengan
devel
versidplyr
(versi -‘0.8.99.9000’
), kita juga dapat menggunakansummarise
untuk menerapkan fungsi pada banyak kolom denganacross
sumber
Untuk pendekatan agregasi data yang lebih fleksibel dan lebih cepat, lihat
collap
fungsi dalam paket R collapse yang tersedia di CRAN:Catatan : Anda dapat menggunakan fungsi-fungsi dasar seperti
mean, max
dll dengancollap
, tetapifmean, fmax
dll. Adalah fungsi-fungsi yang dikelompokkan berdasarkan C ++ yang ditawarkan dalam paket runtuh yang secara signifikan lebih cepat (yaitu kinerja pada agregasi data besar sama dengan data.tabel sambil memberikan fleksibilitas yang lebih besar, dan fungsi yang dikelompokkan cepat ini juga dapat digunakan tanpacollap
).Note2 :
collap
juga mendukung agregasi data multitaspe fleksibel, yang tentu saja dapat Anda lakukan menggunakancustom
argumen, tetapi Anda juga dapat menerapkan fungsi ke kolom numerik dan non-numerik dengan cara semi-otomatis:sumber
Terlambat ke pesta, tetapi baru-baru ini menemukan cara lain untuk mendapatkan ringkasan statistik.
library(psych) describe(data)
Output akan: mean, min, maks, standar deviasi, n, standard error, kurtosis, skewness, median, dan range untuk setiap variabel.
sumber
describe
tidak melakukan apa pun berdasarkan kelompok ...describe.by(column, group = grouped_column)
akan mengelompokkan nilai