为zoo对象创建时间偏移量

时间:2012-09-28 09:01:39

标签: r time-series zoo

我有一个动物园对象,其中包含来自两个不同点(V1和V2)的速度数据,以及来自相同两点的粒子数据。两点之间的距离是170米。

Date<- as.POSIXct("2012-01-01 08:00:00") + 1:120
V1<-rnorm(200,mean=5) #Velocity in m/sec
R<-rnorm(4,mean=3)
V2<-V1+R #Velocity in m/sec
Data1<-rnorm(200, mean=20)
Data2<-rnorm(200, mean=25)
V<-data.frame(V1,V2,Data1,Data2)
z<-zoo(as.matrix(V),order.by=Date)
L<-170 #Length =170m

如果我平均速度数据

z$Avg_Vel<-rowMeans(z[,1:2])

我应该非常清楚颗粒的行进速度,因为我知道距离我应该知道在过程中颗粒从第1点到第2点的过程需要多长时间。时间序列。

z$Off<-L/z$Avg_Vel

但我无法弄清楚如何抵消我的动物园对象以解释粒子在两点之间传播所需的时间延迟。因此,如果我有兴趣找到数据1和数据2之间的区别,我不想做

Diff<-z$Data1-z$Data2

因为这不包括偏移量

如果粒子从点1到点2需要2分钟,那么我想要

Diff<-z$Data1-z$Data2(+2min)

因此,我在查看时间x的Data1和时间x + 2min的Data2之间的差异

为了澄清答案,最终结果将是滚动偏移。那么

  Offset<-z$Off

看着这种偏移

round(as.numeric(z$Off))

结果看起来像这样

1 Diff<- Diff<-z$Data1-z$Data2(+22 sec)
2 Diff<- Diff<-z$Data1-z$Data2(+23 sec)
3 Diff<- Diff<-z$Data1-z$Data2(+32 sec)..........

1 个答案:

答案 0 :(得分:1)

这是一种包含偏移量的方法:

offset <- 120 # 2 minutes in seconds

ix <- index(z) + offset # new time index

计算2分钟偏移的差异:

z$Data1[rev(index(z) %in% ix)] -
 as.numeric(z$Data2[index(z) %in% ix])

您的示例时间序列太短,偏移量为2分钟。我用1分钟的偏移测试了它(offset = 60)。


如果要使用偏移矢量,请使用:

offsets <- sample(1:5, nrow(z), TRUE) # some example offsets (in ms)
# alternatively you could use:
# round(as.numeric(z$Off))

ixs <- index(z) + offsets

ixs_num <- match(ixs, index(z), nomatch = NA)

z$Data1[seq(length(ixs_num))[!is.na(ixs_num)]] -
 as.numeric(z$Data2)[na.omit(ixs_num)]

请注意。此过程适用于正偏移和负偏移。