Aşağıdaki veri çerçevesine sahibim
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)
İd1 ve id2'ye göre gruplandırılmış val1 ve val2 ortalamasını hesaplamak ve aynı anda her id1-id2 kombinasyonu için satır sayısını saymak istiyorum. Her hesaplamayı ayrı ayrı yapabilirim:
# calculate mean
aggregate(. ~ id1 + id2, data = x, FUN = mean)
# count rows
aggregate(. ~ id1 + id2, data = x, FUN = length)
Her iki hesaplamayı da tek bir aramada yapmak için denedim
do.call("rbind", aggregate(. ~ id1 + id2, data = x, FUN = function(x) data.frame(m = mean(x), n = length(x))))
Ancak, bir uyarı ile birlikte bozuk bir çıktı alıyorum:
# 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)
Plyr paketini kullanabilirdim, ancak veri setim oldukça büyük ve veri setinin boyutu büyüdüğünde plyr çok yavaş (neredeyse kullanılamaz).
aggregate
Bir aramada birkaç hesaplama yapmak için veya diğer işlevleri nasıl kullanabilirim ?
aggregate
Cevapların yanı sıraby
ve de vartapply
.