2013-04-15 46 views
7

我確實有丟失數據的問題,但我沒有來港的線性插值動物園數據 - 否則會更容易處理......添加缺少的XTS /與R中

我的數據是這樣的:

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 

正如你所看到的 - 缺少一些分鐘值 - 它是xts/zoo,所以我使用as.POSIXct ...將日期設置爲索引。如何添加缺少的時間步數以獲得完整的ts?我想用線性插值填充缺失的值。

謝謝你的幫助!

+0

了一個可能的答案: http://stackoverflow.com/questions/15114834/interpolate-zoo-object-with-missing-dates?rq = 1 可以和動物園一起工作 - 但之後我可以回到xts。 仍然存在「錯誤」值的問題 - 如何過濾並設置爲NA? 謝謝! –

+0

另請參閱http://stackoverflow.com/questions/11897169/change-nas-to-interpolated-flat-bars –

回答

9

你可以merge你的數據與所有日期的向量。之後,您可以使用na.approx來填充空格(在這種情況下爲NA)。

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

感謝P Lapointe一個很酷的答案。另外,如果您還參加na.approx的「XOUT」參數的優勢,您不再需要做合併:

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"))