如果向量分量之间的时间大于 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)])
将类别 1
和 2
转换为 A
和 B
。
我有以下数据:
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)])
将类别 1
和 2
转换为 A
和 B
。