簡體   English   中英

兩個時間序列的最近時間之間的差異

[英]Difference between nearest times in time two time series

我有一個時間序列,兩個事件(x和y)不規則地發生。 我正在嘗試編寫一些描述從x到最近y事件的時間的腳本。

例如:

Time         x          y
11:01:00     1          0
11:03:04     0          1
11:03:34     0          0
11:06:12     1          1
11:12:00     0          0

我正在嘗試創建一個向量,其中每一行是從y中的每個'1'到x向量中最接近的'1'的時間。

因此,以上將返回:

diff
02:04   (closest point is the previous row here)
0       (occurred on the same row so time difference is 0)
05:48   (occurred on the previous row)

可重復的例子:

time<-c("11:01:00","11:03:04","11:03:34","11:06:12","11:12:00")
x<-c(1,0,0,1,0)
y<-c(0,1,0,1,0)
df<-data.frame(time,x,y)

我不太確定如何解決此問題,我們將不勝感激!

我們可以通過幾個步驟完成:

首先,將您的數據轉換為POSIXct格式,以便我們可以在時間列上使用算術

df$time <- as.POSIXct(df$time, format = "%H:%M:%S")

然后,我們創建兩個新列,索引為x,其中x為1。我假設您的數據按時間順序排列。

df$nextx <- ifelse(df$x == 1, which(df$x == 1), NA)
df$prevx <- rev(ifelse(df$x == 1, which(df$x == 1), NA))

通過使用tidyr :: fill,我們填寫xx,以獲得每個y的下一個和上一個x:

library(tidyr)
df <- df %>% fill(nextx, rev(prevx))

然后,我們使用pmin查找每一行的最小距離:

x = pmin(abs(df$time - df$time[df$nextx]), abs(df$time - df$time[df$prevx]))

和具有ys的行的子集:

x[df$y == 1]
Time differences in secs
[1] 124   0

(大概是,您希望您的數據的y的最后一位為1,在這種情況下,我們將得到您想要的答案):

Time differences in secs
[1] 124   0 348

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM