如何在R中重新采样和插值时间序列数据?

8

我有每5分钟左右记录一次的测量数据:

2012-07-09T05:30:01+02:00   1906.1  1069.2  1093.2  3   1071.0  1905.7  
2012-07-09T05:35:02+02:00   1905.7  1069.2  1093.0  0   1071.5  1905.7  
2012-07-09T05:40:02+02:00   1906.1  1068.7  1093.2  0   1069.4  1905.7  
2012-07-09T05:45:02+02:00   1905.7  1068.4  1093.0  1   1069.6  1905.7  
2012-07-09T05:50:02+02:00   1905.7  1068.2  1093.0  4   1073.3  1905.7  

第一列是数据的时间戳。其余的列是记录的数据。
我需要重新采样我的数据,以便每15分钟有一行数据,例如:
2012-07-09T05:15:00 XX XX XX XX XX XX
2012-07-09T05:30:00 XX XX XX XX XX XX
....

此外,记录的数据中可能会存在空缺,在我看来,需要将超过一小时的间隙替换为一行NA值。

我可以想到几种手动编程的方法,但是是否有内置支持在R中处理这种情况?我已经查看了不同的时间序列数据库(zoochron等),但是没有找到令人满意的内容。


我有一个类似的问题。你找到了这个的包/解决方案吗? - Zhubarb
1
@Rhubarb 你看过 xts 吗?这个包至少允许下采样。to.period等函数。(同时添加了答案) - Buggy
4个回答

7
你可以使用approx或相关的approxfun。如果t是由采样数据的时间点组成的向量,而y是数据向量,则f <- approxfun(t,y)会创建一个函数f,该函数在时间点之间线性插值数据点。
示例:
# irregular time points at which data was sampled
t <- c(5,10,15,25,30,40,50)
# measurements 
y <- c(4.3,1.2,5.4,7.6,3.2,1.2,3.7)

f <- approxfun(t,y)

# get interpolated values for time points 5, 20, 35, 50
f(seq(from=5,to=50,by=15))
[1] 4.3 6.5 2.2 3.7

1
如果您正在寻找内置的降采样功能(不支持上采样),您也可以使用 xts 包。
data(sample_matrix)
samplexts <- as.xts(sample_matrix)
to.monthly(samplexts)
to.yearly(samplexts)

0

-5

你应该查看Openair包,它有很多用于处理时间序列数据的“工具”。


3
这个问题本身并不值得回答,因为它几乎没有什么帮助。任何阅读者仍需要自己弄清楚这些“工具”是否包括间隙处理和重采样支持。 - Bertjan Broeksema

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接