0

2つの異なるポイント(V1とV2)からの速度データと、同じ2つのポイントからのパーティクルデータを含む動物園オブジェクトがあります。2点間の距離は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

しかし、パーティクルが2つのポイント間を移動するのにかかる時間遅延を考慮して、動物園オブジェクトをオフセットする方法がわかりません。したがって、データ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)..........
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 に答える