0

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

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

看着这种Offset

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)..........
4

1 回答 1

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)]

笔记。此过程适用于正偏移和负偏移。

于 2012-10-05T08:41:39.150 回答