在 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的组的起始时间戳