在R中使用线性插值添加缺失的xts/zoo数据

Her*_*ent 7 r time-series zoo xts

我确实有丢失数据的问题,但我没有NA - 否则会更容易处理...

我的数据如下:

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
Run Code Online (Sandbox Code Playgroud)

正如你所看到的 - 缺少一些分钟值 - 它是xts/zoo所以我使用as.POSIXct ...来设置日期作为索引.如何添加缺少的时间步以获得完整的ts?我想用线性插值填充缺失值.

谢谢您的帮助!

Pie*_*nte 10

您可以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)
Run Code Online (Sandbox Code Playgroud)


sfu*_*fuj 6

感谢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"))
Run Code Online (Sandbox Code Playgroud)