2012-01-25 20 views
9

Her satırın bir kişiyi temsil ettiği bir veri çerçevem ​​var. Bu veri çerçevesinin iki değişkeni vardır: yaş ve yıl. Yılda ortalama yaşları bir tablo yapmak istiyorum. Nasıl yapabilirim?R toplamları yerine xtabs aracını nasıl hesaplayabilirim?

Elde edebileceğimin en iyisi xtabs(age ~ year, dataframe)'du, ama bu bana yıllık yaşların toplamını veriyor.

cevap

16

Kullanım aggregate: Eğer ... xtabs kullanmak yukarıdaki cevabı görmek varsa

xtabs(hp~cyl+gear,aggregate(hp~cyl+gear,mtcars,mean)) 
    gear 
cyl  3  4  5 
    4 97.0000 76.0000 102.0000 
    6 107.5000 116.5000 175.0000 
    8 194.1667 0.0000 299.5000 
+0

Mükemmel! Ve oldukça zarif bir çözüm, eklemeliyim. Teşekkürler! –

5

özellikle ddply

ddply(dataframe, .(year), summarise, mean(age)) 

, plyr paketine göz at.

+0

Bana başka çok şık bir çözüm sunduğunuz için teşekkür ederim, ama benim asıl problemim üç değişkeni içerdiğinden, hala stablarla gidiyorum. :) –

+2

değişkenlerini ddply yanı sıra ddply (dataframe,. (Yıl), özetlemek, ortalama (yaş), max (yükseklik), sd (ağırlık), vb ...) 'de listelemeye devam edebilirsiniz. – Justin

5

xtabs çözümünün sizin için çalıştığına sevindim. Benim için onunla çakışan bir paket olmalı (ve bir hata verir). Başka bir çözüm olacaktır:

tapply(dfrm$age, dfrm$year, FUN=mean) 

tablosu (dizi) sadece şeklinde list(fac1, fac2, fac3) ikinci INDEX değişken için ek faktörler ilave tutmak için ek boyutları için.

örneğe uygulanan kullanılarak mtcars:

tapply(mtcars$hp, list(mtcars$cyl,mtcars$gear), mean) 
     3  4  5 
4 97.0000 76.0 102.0 
6 107.5000 116.5 175.0 
8 194.1667 NA 299.5 

ya da daha kompakt:

with(mtcars, tapply(hp, list(cyl, gear), mean)) 
0

Bir diğer çözüm, yaş toplamını hesaplamak için 2 xtabs fonksiyonları, birinci kullanmak için, 2nd Her grup için kişi sayısını almak, sonra ortalama/toplam sayımı ile ortalama olsun.

Ör xtabs (yaş ~ yıl, dataframe)/xtabs (~ yıl, dataframe)

Ancak, toplam yaklaşım medyan veya dataframe uygulanan diğer fonksiyonları hesaplamak için kullanılabilir. Kesinlikle daha esnek.

İlgili konular