如果向量分量之间的时间大于 x,则拆分 dateTime 向量

Splitting a dateTime vector if time is greater than x between vector components

我有以下数据:

df <- data.frame(index = 1:85,
                 times = c(seq(as.POSIXct("2020-10-03 21:31:00 UTC"),
                               as.POSIXct("2020-10-03 22:25:00 UTC")
                               "min"),
                           seq(as.POSIXct("2020-11-03 10:10:00 UTC"),
                               as.POSIXct("2020-11-03 10:39:00 UTC"),
                               "min")
                           ))

如果我们看第 55 行和第 56 行,就会发现时间上有明显的区别:

> df[55:56, ]
   index               times
55    55 2020-10-03 22:25:00
56    56 2020-11-03 10:10:00

我想根据拆分添加第三个分类列split

例如第 df$split[55, ] = A 行和 df$split[56, ] = B

逻辑类似

如果行之间的时间间隔大于 5 分钟,则为后续行开始新类别,直到下一个时间间隔 > 5 分钟的实例。

谢谢

你可以使用

library(dplyr)

df %>% 
  mutate(cat = 1 + cumsum(c(0, diff(times)) > 5))

哪个returns

   index               times cat
1      1 2020-10-03 21:31:00   1
2      2 2020-10-03 21:32:00   1
3      3 2020-10-03 21:33:00   1
4      4 2020-10-03 21:34:00   1
5      5 2020-10-03 21:35:00   1
6      6 2020-10-03 21:36:00   1
7      7 2020-10-03 21:37:00   1
8      8 2020-10-03 21:38:00   1
...
53    53 2020-10-03 22:23:00   1
54    54 2020-10-03 22:24:00   1
55    55 2020-10-03 22:25:00   1
56    56 2020-11-03 10:10:00   2
57    57 2020-11-03 10:11:00   2
58    58 2020-11-03 10:12:00   2
59    59 2020-11-03 10:13:00   2

如果您需要字母或其他东西,例如您可以使用

df %>% 
  mutate(cat = LETTERS[1 + cumsum(c(0, diff(times)) > 5)])

将类别 12 转换为 AB