2012-09-28 78 views
0

我有一個動物園對象,其中包含來自兩個不同點(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 

因爲這不包括偏移

如果需要2分鐘的顆粒從1點移動到2點,比我想

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

讓我在看時間X數據1之間的差異,並在時間數據2 X + 2分鐘

澄清作爲對答案的迴應,最終結果將是滾動抵消。這樣

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).......... 
+0

我應該提到,我已經能夠通過在合併它們之前將偏移量應用於其中一個數據幀來彌補我的時間。但是我希望能夠在一個動物園對象內抵消我的時間 – Vinterwoo

+0

你能解釋第8行的動物園功能嗎? – Sathish

回答

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

注意。此過程適用於正偏移和負偏移。

+0

謝謝你,1分鐘抵消它工作得很好。我應該更加明確,因爲我使用「2分鐘」偏移量作爲示例。我期望的是基於速度的滾動偏移。因此,在這種情況下,您的上述代碼偏移量<-z $ Off – Vinterwoo

+0

@Vinterwoo我通過一種使用偏移矢量的方式擴展了我的答案。 –