Tập hợp các vectơ chuỗi thời gian R


25

Tôi có một chuỗi thời gian và tôi muốn đặt nó trong khi giữ nó như một chuỗi thời gian, bảo toàn bắt đầu, kết thúc và tần suất.

Ví dụ: giả sử tôi có chuỗi thời gian:

> qs <- ts(101:110, start=c(2009, 2), frequency=4)
> qs
     Qtr1 Qtr2 Qtr3 Qtr4
2009       101  102  103
2010  104  105  106  107
2011  108  109  110     

Bây giờ tôi sẽ đặt nó:

> qs[time(qs) >= 2010 & time(qs) < 2011]
[1] 104 105 106 107

Lưu ý rằng tôi đã nhận được kết quả chính xác, nhưng tôi đã mất "kết thúc" từ chuỗi thời gian (cụ thể là bắt đầu, kết thúc, tần suất.)

Tôi đang tìm kiếm một chức năng cho việc này. Không tập hợp một chuỗi thời gian là một kịch bản phổ biến? Vì tôi chưa tìm thấy cái nào, đây là một chức năng tôi đã viết:

subset.ts <- function(data, start, end) {
  ks <- which(time(data) >= start & time(data) < end)
  vec <- data[ks]
  ts(vec, start=start(data) + c(0, ks[1] - 1), frequency=frequency(data))
}

Tôi muốn nghe về những cải tiến hoặc cách sạch hơn để làm điều này. Cụ thể, tôi không thích cách tôi bắt đầu và kết thúc mã hóa cứng. Tôi muốn để người dùng chỉ định một điều kiện boolean tùy ý.

Câu trả lời:


34

Sử dụng windowchức năng:

> window(qs, 2010, c(2010, 4))
     Qtr1 Qtr2 Qtr3 Qtr4
2010  104  105  106  107

2
Cũng lưu ý rằng cửa sổ (qs, 2010, c (2010, 4)) <- 3 sẽ thay đổi qs tương ứng.
mpiktas

6

Cũng hữu ích, nếu bạn đang kết hợp nhiều chuỗi thời gian và không muốn phải có windowmọi thứ để khớp chúng, ts.unionts.intersect.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.