在 R 中使用线性插值添加缺失的 xts/zoo 数据
Posted
技术标签:
【中文标题】在 R 中使用线性插值添加缺失的 xts/zoo 数据【英文标题】:Add missing xts/zoo data with linear interpolation in R 【发布时间】:2013-04-07 08:48:57 【问题描述】:我确实有丢失数据的问题,但我没有 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
如您所见 - 缺少一些分钟值 - 它是 xts/zoo,所以我使用 as.POSIXct... 将日期设置为索引。如何添加缺少的时间步来获得完整的 ts?我想用线性插值填充缺失值。
感谢您的帮助!
【问题讨论】:
得到了一个可能的答案:***.com/questions/15114834/… 确实适用于动物园 - 但之后我可以回到 xts。 “错误”值仍然存在问题 - 如何过滤并设置为 NA?谢谢! 另见***.com/questions/11897169/… 【参考方案1】:您可以使用包含所有日期的向量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)
【讨论】:
【参考方案2】:感谢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"))
【讨论】:
以上是关于在 R 中使用线性插值添加缺失的 xts/zoo 数据的主要内容,如果未能解决你的问题,请参考以下文章
R语言ggplot2可视化:使用pracma包的interp1函数对缺失值进行线性插值后进行可视化分析用虚线标记进行数据填充的区域