2013-04-15 35 views
7

tôi có vấn đề với dữ liệu bị mất, nhưng tôi không có NA - nếu không sẽ dễ dàng hơn để xử lý ...Add thiếu XTS/dữ liệu thú với suy tuyến tính trong R

Dữ liệu của tôi trông như thế này:

time, value 
2012-11-30 10:28:00, 12.9 
2012-11-30 10:29:00, 5.5 
2012-11-30 10:30:00, 5.5 
2012-11-30 10:31:00, 5.5 
2012-11-30 10:32:00, 9 
2012-11-30 10:35:00, 9 
2012-11-30 10:36:00, 14.4 
2012-11-30 10:38:00, 12.6 

Như bạn thấy - thiếu một số giá trị phút - đó là xts/zoo nên tôi sử dụng as.POSIXct ... để đặt ngày làm chỉ mục. Làm thế nào để thêm các timesteps mất tích để có được một ts đầy đủ? Tôi muốn điền vào các giá trị còn thiếu với nội suy tuyến tính.

Cảm ơn sự giúp đỡ của bạn!

+0

Got một câu trả lời có thể: http://stackoverflow.com/questions/15114834/interpolate-zoo-object-with-missing-date? rq = 1 không hoạt động với sở thú - nhưng sau đó tôi có thể quay trở lại xts. Vẫn còn vấn đề với giá trị "sai" - cách lọc và đặt thành NA? Cảm ơn! –

+0

Xem thêm http://stackoverflow.com/questions/11897169/change-nas-to-interpolated-flat-bars –

Trả lời

9

Bạn có thể merge dữ liệu của mình bằng vectơ có tất cả các ngày. Sau đó bạn có thể sử dụng na.approx để điền vào chỗ trống (NA trong trường hợp này).

data1 <-read.table(text="time, value 
2012-11-30-10:28:00, 12.9 
2012-11-30-10:29:00, 5.5 
2012-11-30-10:30:00, 5.5 
2012-11-30-10:31:00, 5.5 
2012-11-30-10:32:00, 9 
2012-11-30-10:35:00, 9 
2012-11-30-10:36:00, 14.4 
2012-11-30-10:38:00, 12.6", header = TRUE, sep=",", as.is=TRUE) 
times.init <-as.POSIXct(strptime(data1[,1], '%Y-%m-%d-%H:%M:%S')) 
data2 <-zoo(data1[,2],times.init) 
data3 <-merge(data2, zoo(, seq(min(times.init), max(times.init), "min"))) 
data4 <-na.approx(data3) 
4

Cảm ơn P Lapointe để có câu trả lời hay. Ngoài ra, nếu bạn cũng tận dụng lợi thế của 'xout' tranh luận trong na.approx, bạn không còn cần phải làm như sáp nhập:

data1 <-read.table(text="time, value 
2012-11-30-10:28:00, 12.9 
2012-11-30-10:29:00, 5.5 
        2012-11-30-10:30:00, 5.5 
        2012-11-30-10:31:00, 5.5 
        2012-11-30-10:32:00, 9 
        2012-11-30-10:35:00, 9 
        2012-11-30-10:36:00, 14.4 
        2012-11-30-10:38:00, 12.6", header = TRUE, sep=",", as.is=TRUE) 
times.init <-as.POSIXct(strptime(data1[,1], '%Y-%m-%d-%H:%M:%S')) 
data2 <-zoo(data1[,2],times.init) 
data2 
data4 <- na.approx(object=data2, 
      xout=seq(min(times.init), max(times.init), "min")) 
Các vấn đề liên quan