嗨我有以下15Hz记录的数据,我想使用线性插值重新采样到25 Hz。实现这一目标的最佳方法是什么? 这是我数据集的第一秒:
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到25 Hz的数据进行上采样?
似乎有一个明确的包来处理R中的时间序列像zoo和xts,但我不确定我是否需要它们。 两个数据集同时开始,因此在上采样之后我可以简单地通过rownumber匹配。
感谢您的帮助!
答案 0 :(得分: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')
在您的情况下,x值的输入为time
,y值的输入为{{1}}。然后,以25Hz的间隔(0.04秒)输入一系列“新”x值,以获得所需的拟合值。
答案 1 :(得分:1)
我将做出一些假设 - 首先,数据列“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)
我不太明白你的第二组数据与第一组数据有什么关系,但如果它只是同时开始的1/25间隔的附加信息,你可以使用cbind组合这两个数据框。