2011-01-28 37 views
8

Guys, bình thường khi bạn làm điều gì đó như:rollapply với "phát triển" cửa sổ

tmp = zoo(rnorm(100), 1:100) 
rollapply(tmp, 10, function(x) quantile(x, 0.05), align="right") 

Khá đúng rollapply sẽ bắt đầu tính giá trị từ thời điểm 10 yếu tố có sẵn.

Thật không may, tôi cần một cái gì đó sử dụng càng nhiều dữ liệu càng tốt cho các quan sát nắm tay 10, về cơ bản là một cửa sổ ngày càng tăng của dữ liệu cho đến khi có đủ dữ liệu để sử dụng cửa sổ trượt, ví dụ: 1, 1: 2, 1: 3, 1: 4, vv cho đến khi chúng ta có ít nhất 10 phần tử và sau đó trượt cửa sổ như bình thường.

Có cách nào tốt hơn để làm điều này hơn một vòng lặp xấu không?

Trả lời

4

Tại sao không chỉ đệm chuỗi với 9 NA lúc đầu? Chắc chắn tốt hơn "xấu xí cho vòng":

tmp = zoo(c(rep(NA,9), rnorm(100)), 1:109) 
zoo(rollapply(tmp, 10, function(x) quantile(x, 0.05, na.rm = TRUE), 
       align="right"), 1:100) 
10

rollapply trong vườn thú có thể làm điều đó bằng cách chỉ định partial=TRUE, ví dụ:

> library(zoo) 
> 
> rollapplyr(zoo(1:20), 3, sum, partial=TRUE) 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
1 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 
+0

Có vẻ như định nghĩa chức năng 'rollapply' đã bị thay đổi. Các cuộc gọi chức năng bây giờ sẽ như thế - 'rollapply (1:20, 3, FUN = sum, align =" right ", partial = TRUE)' – steadyfish

+0

Cảm ơn. Đã sửa. –

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