2013-04-23 28 views
5

Tôi có ma trận XTS sau:Cách tạo chu kỳ xts thông thường từ các quan sát thời gian ngẫu nhiên?

> options(digits.secs = 6) 
> set.seed(1234) 
> xts(1:10, as.POSIXlt(1366039619, tz="EST", origin="1970-01-01") + rnorm(10, 500000, 250000)/1000000) 
          [,1] 
2013-04-15 10:26:58.913576 4 
2013-04-15 10:26:59.198234 1 
2013-04-15 10:26:59.277491 10 
2013-04-15 10:26:59.356315 7 
2013-04-15 10:26:59.358887 9 
2013-04-15 10:26:59.363342 8 
2013-04-15 10:26:59.569357 2 
2013-04-15 10:26:59.607281 5 
2013-04-15 10:26:59.626514 6 
2013-04-15 10:26:59.771110 3 
Warning message: 
timezone of object (EST) is different than current timezone(). 

tôi cần phải tạo ra hàng loạt mục thời gian mỗi 100 mili giây mang giá trị cuối cùng trong giai đoạn đó. Ví dụ:

      [,1] 
2013-04-15 10:26:58.000000 4 
2013-04-15 10:26:59.100000 4 
2013-04-15 10:26:59.200000 1 
2013-04-15 10:26:59.300000 10 
2013-04-15 10:26:59.400000 8 
... 

Lưu ý cách mục nhập cuối cùng mang 8, là mục nhập cuối cùng cho khoảng thời gian từ 300.000 đến 0,99999.

+0

Bạn đã tạo đối tượng thứ hai như thế nào? Bạn có thể thêm một cuộc gọi 'set.seed' trước khi bạn gọi' rnorm', vì vậy ví dụ của bạn có thể tái tạo đầy đủ không? –

+0

Đối tượng thứ hai? Tôi đã không, nó chỉ là một ví dụ về kết quả tôi cần. Tôi sẽ thêm set.seed() vào đối tượng đầu tiên. –

+0

Điều gì xảy ra nếu có nhiều quan sát trong một hoặc nhiều khoảng thời gian? –

Trả lời

6

Tôi không chắc chắn nếu điều này sẽ làm việc trên Windows, vì hỗ trợ cho độ chính xác phụ thứ hai là người nghèo, nhưng điều này hoạt động trên Ubuntu.

library(xts) 
options(digits.secs=6) 
set.seed(1234) 
x <- xts(1:10, as.POSIXlt(1366039619, tz="EST", origin="1970-01-01") 
    + rnorm(10, 500000, 250000)/1000000) 
ti <- trunc(index(x)) 
ms <- rep(seq(min(ti),max(ti),by="s"), each=10)+0:9/10 
a <- merge(x,ms,fill=na.locf)[ms] 

Bạn sẽ nhận thấy rằng bạn xử lý giống như bất kỳ trường hợp nào khác mà bạn cần tạo chuỗi xts thông thường từ dữ liệu không thường xuyên. Đó là một chút khó khăn hơn mặc dù, vì nó khó khăn hơn để tạo ra một chuỗi phụ thứ hai.

+1

Tôi nhận thấy các mục nhập chỉ mục trùng lặp trong tập hợp đã hợp nhất trong một số trường hợp. Tôi nghĩ đó là khi cùng một chỉ số chính xác xuất hiện trong cả 'x' và' ms' (cùng một chỉ số đến mili giây chính xác). Dòng này sẽ xóa các phần tử trùng lặp: 'a = a [- (mà (c (chỉ mục (a [-1]), NA) == chỉ số (a)))]' –

+0

@ Robert-Kubrick Tôi vừa giải được một vấn đề tương tự này, và chạy vào cùng một vấn đề như thế này - trùng lặp. Nhận xét này là một bình luận quan trọng! Cảm ơn vì đã chú ý ... – FXQuantTrader

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