两个时间序列的最近时间之间的差异

时间:2016-03-24 16:45:05

标签: r

我有一个时间序列,其中两个事件(x和y)不规则地发生。 我正在尝试编写一些描述从x到最近y事件的时间的脚本。

例如:

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)

我正在尝试创建一个向量,其中每一行是从y中的每个'1'到x向量中最接近的'1'的时间。

所以上面会回来:

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)

可重复的例子:

export default function(store) {
  return (
    <Route path="/" component={Main}>
      [ALL NESTED ROUTES]
    </Route>
  )
}

我不确定如何解决这个问题,任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:0)

我们可以通过以下几个步骤完成:

首先将数据转换为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,在这种情况下我们会得到你想要的答案):

Time differences in secs
[1] 124   0 348