Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
线性插值15 Hz时间序列,以与R中的25 Hz时间序列相匹配_R_Linear Interpolation - Fatal编程技术网

线性插值15 Hz时间序列,以与R中的25 Hz时间序列相匹配

线性插值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

嗨,我用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        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\ seq
approx
的帮助页面非常明确地说明了如何指定要插值的
x
-值!如果您愿意,可以使用
lm
创建线性拟合方程,并向其提供一个数据向量。您能更详细地介绍一下plz吗?我想我对近似功能有一个大致的理解问题…也许还有一个更好的功能来实现我想要的。你的假设是正确的-我刚刚意识到我在提问方面有多差-很抱歉,我想这是因为我在午餐时意识到我对近似功能的误解。对我来说,真正相关的变量是“RBDDLO_0”,“RBDDGS_0”,但很酷地看到,其他人会如何做!因此,如果我正确理解了您的代码,您首先创建一个时间序列,第一行中有40毫秒的步长……然后使用近似值来适应该序列。cbind和sapply是必要的,因为您希望在一行中实现所有变量,而不是逐个var?没错。如果您非常想使用R,那么可能需要熟悉“应用”功能。Sappy是比较常见的一种。