2012-01-25 26 views
9

Tôi có một khung dữ liệu trong đó mỗi dòng đại diện cho một cá nhân. Khung dữ liệu đó có hai biến: tuổi và năm. Tôi muốn lập một bảng tuổi trung bình mỗi năm. Tôi làm nó như thế nào?Làm thế nào tôi có thể nhận được xtabs để tính toán phương tiện thay vì tổng trong R?

Điều tốt nhất tôi có thể đưa ra là xtabs(age ~ year, dataframe), nhưng điều này mang lại cho tôi tổng số độ tuổi mỗi năm.

Trả lời

16

Sử dụng aggregate:

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

Hoàn hảo! Và một giải pháp khá tao nhã, tôi phải thêm vào. Cảm ơn! –

5

Hãy nhìn vào gói plyr, cụ thể ddply

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

Nếu bạn phải sử dụng xtabs ... xem câu trả lời ở trên.

+0

Cảm ơn bạn đã cho tôi thấy một giải pháp rất thanh lịch, nhưng vì vấn đề thực tế của tôi liên quan đến ba biến, tôi vẫn đang đi với đâm. :) –

+2

bạn có thể tiếp tục liệt kê các biến trong ddply cũng như ddply (dataframe,. (Năm), tóm tắt, trung bình (tuổi), max (height), sd (weight), etc ...) ' – Justin

5

Tôi rất vui vì giải pháp xtabs phù hợp với bạn. Tôi phải có một gói tải mà can thiệp với nó cho tôi (và đưa ra một lỗi). Một giải pháp khác sẽ là:

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

Để có được kích thước bổ sung cho bảng (mảng) chỉ tiếp tục bổ sung các yếu tố bổ sung cho các lập luận INDEX thứ hai theo hình thức list(fac1, fac2, fac3).

Áp dụng cho ví dụ bằng cách sử dụng 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 

Hoặc thậm chí gọn hơn:

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

Một giải pháp khác là sử dụng 2 xtabs chức năng, một trong những đầu tiên để tính toán tổng các lứa tuổi, 2nd một để có được headcount cho mỗi nhóm, sau đó nhận được giá trị trung bình bằng tổng số/headcount.

Ví dụ: xtabs (tuổi ~ năm, dataframe)/xtabs (~ năm, dataframe)

Tuy nhiên, cách tiếp cận tổng hợp có thể được sử dụng để tính trung bình hoặc các chức năng khác áp dụng cho các dataframe. Chắc chắn linh hoạt hơn.

Các vấn đề liên quan