线性插值15 Hz时间序列,以与R中的25 Hz时间序列相匹配
嗨,我用15Hz记录了以下数据,我想用线性插值将其重新采样到25Hz。实现这一目标的最佳方式是什么? 以下是我的数据集的第一秒:线性插值15 Hz时间序列,以与R中的25 Hz时间序列相匹配,r,linear-interpolation,R,Linear Interpolation,嗨,我用15Hz记录了以下数据,我想用线性插值将其重新采样到25Hz。实现这一目标的最佳方式是什么? 以下是我的数据集的第一秒: RecordFile YTSIMTMD RBDDLO_0 RBDDGS_0 IDLWMWC1 time timeNF 864 2C01MUC.txx 85535.10 -0.31 -0.348873 1 0.00000 0 865 2C01MUC.txx 85535.17 -0.31 -0.348873
RecordFile YTSIMTMD RBDDLO_0 RBDDGS_0 IDLWMWC1 time timeNF
864 2C01MUC.txx 85535.10 -0.31 -0.348873 1 0.00000 0
865 2C01MUC.txx 85535.17 -0.31 -0.348873 1 0.06667 6667
866 2C01MUC.txx 85535.23 -0.31 -0.348873 0 0.13334 13334
867 2C01MUC.txx 85535.30 -0.31 -0.348832 0 0.20000 20000
868 2C01MUC.txx 85535.37 -0.31 -0.348832 0 0.26667 26667
869 2C01MUC.txx 85535.43 -0.31 -0.348832 0 0.33334 33334
870 2C01MUC.txx 85535.50 -0.31 -0.348832 1 0.40000 40000
871 2C01MUC.txx 85535.57 -0.31 -0.348796 1 0.46667 46667
872 2C01MUC.txx 85535.63 -0.31 -0.348796 1 0.53334 53334
873 2C01MUC.txx 85535.70 -0.31 -0.348796 1 0.60000 60000
874 2C01MUC.txx 85535.77 -0.31 -0.348796 0 0.66667 66667
875 2C01MUC.txx 85535.83 -0.31 -0.348767 0 0.73334 73334
876 2C01MUC.txx 85535.90 -0.31 -0.348767 0 0.80000 80000
877 2C01MUC.txx 85535.97 -0.31 -0.348767 0 0.86667 86667
878 2C01MUC.txx 85536.03 -0.31 -0.348767 1 0.93334 93334
879 2C01MUC.txx 85536.10 -0.31 -0.348735 1 1.00000 100000
之后,我想把它和这个用25赫兹记录的数据集进行匹配
vpName vpID origIndex areaNum areaName startMS endMS durationMS startF endF durationF accumIndex
1 2C01 1 1 2 ATT 0 560 560 0 14 14 1
2 2C01 1 1 2 ATT 0 560 560 0 14 14 1
3 2C01 1 1 2 ATT 0 560 560 0 14 14 1
4 2C01 1 1 2 ATT 0 560 560 0 14 14 1
5 2C01 1 1 2 ATT 0 560 560 0 14 14 1
6 2C01 1 1 2 ATT 0 560 560 0 14 14 1
我发现,approx
似乎是R中线性插值的线性插值,但是我不确定使用哪些参数将数据从15 Hz增加到25 Hz
在R中似乎有明确的处理时间序列的包,比如zoo和xts,但我不确定是否需要它们。
两个数据集同时开始,所以在上采样之后,我可以简单地通过行数进行匹配
谢谢你的帮助 下面是一个示例,使用
approxfun
创建与输入数据线性拟合的函数:
xin<-seq(1,26,by=5)
yin<-2.5+3*xin
myfun<-approxfun(xin,yin)
plot(xin,yin)
newy<-myfun(seq(3,18,by=5))
points(seq(3,18,by=5),newy)
points(seq(3,18,by=5),newy,col='red')
xin我将做一些假设-首先,数据列“YTSIMTMD”、“RBDDLO_0”和“RBDDGS_0”包含连续数据,因此可以使用线性插值。第二,IDLWMWC1列包含二进制数据,因此我们将使用method=constant进行插值,该方法选择插值时间之前最后一个数据时间的数据值。鉴于此,以下使用近似进行插值,并将其合并到数据帧中。插值时间以1/freq的时间间隔生成。我将您的数据放入称为xx的数据帧中
t_seq <- seq(min(xx$time), max(xx$time),1/25)
ap <- cbind(t_seq, sapply(xx[,c("YTSIMTMD", "RBDDLO_0","RBDDGS_0")],
function(y, x, nout) approx(x, y, nout, method="linear")$y, x=xx$time, nout=t_seq ))
ap <- cbind(ap,IDLWMWC1=approx(xx$time, xx$IDLWMWC1, t_seq, method="constant")$y)
t\ seqapprox
的帮助页面非常明确地说明了如何指定要插值的x
-值!如果您愿意,可以使用lm
创建线性拟合方程,并向其提供一个数据向量。您能更详细地介绍一下plz吗?我想我对近似功能有一个大致的理解问题…也许还有一个更好的功能来实现我想要的。你的假设是正确的-我刚刚意识到我在提问方面有多差-很抱歉,我想这是因为我在午餐时意识到我对近似功能的误解。对我来说,真正相关的变量是“RBDDLO_0”,“RBDDGS_0”,但很酷地看到,其他人会如何做!因此,如果我正确理解了您的代码,您首先创建一个时间序列,第一行中有40毫秒的步长……然后使用近似值来适应该序列。cbind和sapply是必要的,因为您希望在一行中实现所有变量,而不是逐个var?没错。如果您非常想使用R,那么可能需要熟悉“应用”功能。Sappy是比较常见的一种。