2011-06-30 48 views
7

Cho một ts hàng tháng đối tượng như thế này:Tính trung bình hàng tháng của ts đối tượng

dat <- ts(c(295, 286, 300, 278, 272, 268, 308, 321, 313, 308, 291, 296, 
294, 273, 300, 271, 282, 285, 318, 323, 313, 311, 291, 293, 297, 
273, 294, 259, 276, 294, 316, 325, 315, 312, 292, 301), frequency = 12) 

Làm thế nào tôi có thể tính toán trung bình theo tháng? tức là tôi muốn tính mức trung bình của tháng 1, năm1 + tháng 1, năm2 + tháng 1, năm 3 ... v.v. và sau đó có thể so sánh với tháng 2 ...

Một cách tiếp cận mà tôi nghĩ là biến nó thành ma trận 12 cột và sử dụng colMeans(), nhưng tôi tưởng tượng có một cách tốt hơn để tận dụng khía cạnh time() đối tượng ts()?

colMeans(matrix(dat, ncol = 12, byrow = TRUE)) 

Trả lời

8

Ok, vì vậy tôi cần cho tìm kiếm Google là một trong nhiều trước khi đến SO như post is relevant này. Chức năng cycle() dường như là hữu ích cho những thứ như:

> tapply(dat, cycle(dat), mean) 
     1   2   3   4   5   6   7   8   9 
295.33333 277.33333 298.00000 269.33333 276.66667 282.33333 314.00000 323.00000 313.66667 
     10  11  12 
310.33333 291.33333 296.66667 

> aggregate(c(dat), list(month = cycle(dat)), mean) 
    month   x 
1  1 295.33333 
2  2 277.33333 
3  3 298.00000 
.... 

Bất cứ điều gì khác cơ bản tôi đang thiếu ở đây?

+0

Tháng '1',' 2', '3', ... chúng có đề cập đến Jan, Feb, Mar ...? Nói cách khác, thứ tự tiếp theo là 'tapply' khi nó trả về giá trị trung bình là gì? – FaCoffee

+1

@FaCoffee - trong ngắn hạn, có. Kiểm tra 'cycle (dat)' để xem nó đang làm gì dưới mui xe và '? Cycle' nữa. – Chase

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