首页 > 解决方案 > 在 R 中,如何自动检测首次出现非标准时差的位置?

问题描述

我有一个数据框,其中每一行都是不同的时间戳。数据框中较旧的数据每隔 30 分钟收集一次,而较新的数据每隔 15 分钟收集一次。我想运行一个计算每行之间的时间差的 for 循环(或者可能是 ifelse 语句),如果差值等于 30 分钟(下面的示例使用 1800 秒),则循环继续,但如果循环遇到15 分钟的时差(下面的示例使用 900 秒)它会停止并告诉我这首先发生在哪一行。

x <- as.POSIXct("2000-01-01 01:00", tz = "", "%Y-%m-%d %H:%M")
y <- as.POSIXct("2000-01-10 12:30", tz = "", "%Y-%m-%d %H:%M")
xx <- as.POSIXct("2000-01-10 12:45", tz = "", "%Y-%m-%d %H:%M")
yy <- as.POSIXct("2000-01-20 23:45", tz = "", "%Y-%m-%d %H:%M")

a.30 <- as.data.frame(seq(from = x, to = y, by = 1800))
names(a.30)[1] <- "TimeStamp"
a.15 <- as.data.frame(seq(from = xx, to = yy, by = 900))
names(a.15)[1] <- "TimeStamp"

dat <- rbind(a.30,a.15)

在示例dat数据帧中,时间差在第 457 行从 30 分钟间隔切换到 15 分钟。我想自动化识别时间差变化首先发生的行的过程。

标签: rdatetimefor-loopif-statement

解决方案


我们可以difftime用来计算时间上的差异,mins并根据差异创建一个逻辑向量

library(dplyr)
dat %>%
   summarise(ind = which.max(abs(as.numeric(difftime(TimeStamp, 
       lag(TimeStamp, default = TimeStamp[2]), unit = 'min'))) < 30))
#  ind
#1 457

推荐阅读