2011-08-22 38 views
6

VớiLàm thế nào để tóm tắt dữ liệu theo nhóm với trung bình có trọng số?

xa=aggregate(x$avg,by=list(x$value),FUN=weighted.mean,w=x$weight) 

mang lại cho tôi một lỗi

Lỗi trong weighted.mean.default (X [[1L]], ...): 'x' và 'w' phải có cùng độ dài

Nhưng

weighted.mean(x$avg,w=x$weight);

hoạt động tốt.

+1

Khi bạn sử dụng tổng hợp, bạn chia bộ dữ liệu của mình thành các khối. Vì vậy, trọng số trung bình là hoạt động trên một đoạn dữ liệu. Vì vậy, trọng lượng nên được từ đoạn này. Tuy nhiên, bạn cung cấp các trọng số từ tất cả các dữ liệu. Do đó thông báo lỗi. – mpiktas

+0

một cái gì đó như thế này sẽ làm việc: 'tổng hợp (x [, c (" avg "," trọng lượng ")], bởi = danh sách (x $ giá trị), FUN = chức năng (d) weighted.mean (d [, 1], d [, 2])) ' – mpiktas

+0

Bạn có thể đưa ra câu hỏi này một số thẻ phù hợp không? (Nếu ngôn ngữ này là R, thẻ [tag: r] có vẻ đúng.) –

Trả lời

7

Như đã đề cập trên một old R thread, bạn có thể sử dụng by thay vì:

wt <- c(5, 5, 4, 1)/15 
x <- c(3.7,3.3,3.5,2.8) 
xx <- data.frame(avg=x, value=gl(2,2), weight=wt) 
by(xx, xx$value, function(x) weighted.mean(x$avg, x$weight)) 
5

này trở thành một 'triệu cách để da một con mèo' câu hỏi, đây là một giải pháp plyr (sử dụng @ dữ liệu ví dụ chl của):

ddply(xx,.(value),summarise, wm = weighted.mean(avg,weight)) 
Các vấn đề liên quan