0

嗨,我以 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 Hz 记录的数据集相匹配

  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,但我不确定是否需要它们。两个数据集同时开始,所以在上采样后我可以简单地按行号匹配。

感谢您的帮助!

4

2 回答 2

1

我将做一些假设 - 首先,数据列“YTSIMTMD”“RBDDLO_0”和“RBDDGS_0”包含连续数据,因此可以使用线性插值。其次,该列 IDLWMWC1 包含二进制数据,因此我们将使用 method=constant 进行插值,该方法选择插值时间之前的最后一个数据时间的数据值。鉴于此,以下使用 approx 进行插值并将它们组合成一个数据帧。插值时间以 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)

我不太了解您的第二组数据与第一组数据的关系,但如果它只是同时开始的 1/25 间隔的附加信息,您可以使用 cbind 组合两个数据框。

于 2014-08-09T13:37:42.370 回答
1

这是一个示例,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')

在您的情况下,输入time用于 x 值,而您正在使用的任何东西都用于 y 值。然后只需以 25Hz 间隔(0.04 秒)输入一系列“新”x 值,以获得您想要的拟合值。

于 2014-08-09T13:19:00.040 回答