7

我大约每 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找不到任何令人满意的东西。

4

4 回答 4

7

您可以使用approx或相关的approxfun. Ift是由采样数据的时间点组成的向量,如果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
于 2015-09-14T15:46:07.170 回答
1

如果您正在寻找内置的下采样(不支持上采样),您也可以使用该xts软件包。

data(sample_matrix)
samplexts <- as.xts(sample_matrix)
to.monthly(samplexts)
to.yearly(samplexts)
于 2017-03-06T09:18:01.727 回答
0

CrossValidated 对此进行了很好的讨论:https ://stats.stackexchange.com/questions/31666/how-can-i-align-synchronize-two-signals 。该答案的作者“推出了他自己的”插值和重采样代码。

于 2013-05-24T14:17:46.260 回答
-5

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

于 2012-10-25T15:41:05.653 回答