Saya memiliki bingkai data berikut
x <- read.table(text = " id1 id2 val1 val2
1 a x 1 9
2 a x 2 4
3 a y 3 5
4 a y 4 9
5 b x 1 7
6 b y 4 4
7 b x 3 9
8 b y 2 8", header = TRUE)
Saya ingin menghitung mean dari val1 dan val2 yang dikelompokkan berdasarkan id1 dan id2, dan sekaligus menghitung jumlah baris untuk setiap kombinasi id1-id2. Saya dapat melakukan setiap perhitungan secara terpisah:
# calculate mean
aggregate(. ~ id1 + id2, data = x, FUN = mean)
# count rows
aggregate(. ~ id1 + id2, data = x, FUN = length)
Untuk melakukan kedua kalkulasi dalam satu panggilan, saya mencoba
do.call("rbind", aggregate(. ~ id1 + id2, data = x, FUN = function(x) data.frame(m = mean(x), n = length(x))))
Namun, saya mendapatkan hasil yang kacau bersama dengan peringatan:
# m n
# id1 1 2
# id2 1 1
# 1.5 2
# 2 2
# 3.5 2
# 3 2
# 6.5 2
# 8 2
# 7 2
# 6 2
# Warning message:
# In rbind(id1 = c(1L, 2L, 1L, 2L), id2 = c(1L, 1L, 2L, 2L), val1 = list( :
# number of columns of result is not a multiple of vector length (arg 1)
Saya dapat menggunakan paket plyr, tetapi kumpulan data saya cukup besar dan plyr sangat lambat (hampir tidak dapat digunakan) ketika ukuran kumpulan data bertambah.
Bagaimana cara menggunakan aggregate
atau fungsi lain untuk melakukan beberapa kalkulasi dalam satu panggilan?
aggregate
disebutkan dalam jawaban ada jugaby
dantapply
.