在 R 中检测 POSIXct 中的连续分钟
Detect consequitive minutes in POSIXct in R
假设我有
dt <- as.POSIXct(c("2020-01-01 09:30:00",
"2020-01-01 09:31:00",
"2020-01-01 09:35:00",
"2020-01-01 09:36:00",
"2020-01-01 09:37:00",
"2020-01-01 09:40:00",
"2020-01-01 09:50:00",
"2020-01-01 09:51:00",
"2020-01-01 09:52:00"))
并且我想找到每次说连续 3 分钟在 dt
中的第一分钟,即
"2020-01-01 09:35:00" "2020-01-01 09:50:00".
我怎样才能做到这一点?
这是基本的 R 方法 -
with(rle(as.integer(c(difftime(dt[-1],dt[-length(dt)],units = 'mins'),0)) == 1),
dt[!duplicated(rep(seq_along(values), lengths)) &
rep(lengths >= 2 & values, lengths)])
#[1] "2020-01-01 09:35:00 +08" "2020-01-01 09:50:00 +08"
difftime
计算连续时间戳之间的差异。
- 我们使用
rle
计算时间戳之间相差 1 分钟的长度。
- Return只有长度大于2的组的起始时间戳
假设我有
dt <- as.POSIXct(c("2020-01-01 09:30:00",
"2020-01-01 09:31:00",
"2020-01-01 09:35:00",
"2020-01-01 09:36:00",
"2020-01-01 09:37:00",
"2020-01-01 09:40:00",
"2020-01-01 09:50:00",
"2020-01-01 09:51:00",
"2020-01-01 09:52:00"))
并且我想找到每次说连续 3 分钟在 dt
中的第一分钟,即
"2020-01-01 09:35:00" "2020-01-01 09:50:00".
我怎样才能做到这一点?
这是基本的 R 方法 -
with(rle(as.integer(c(difftime(dt[-1],dt[-length(dt)],units = 'mins'),0)) == 1),
dt[!duplicated(rep(seq_along(values), lengths)) &
rep(lengths >= 2 & values, lengths)])
#[1] "2020-01-01 09:35:00 +08" "2020-01-01 09:50:00 +08"
difftime
计算连续时间戳之间的差异。- 我们使用
rle
计算时间戳之间相差 1 分钟的长度。 - Return只有长度大于2的组的起始时间戳