计算 R 中两个时间戳之间的差异; NA 与时差输出一起出现

Calculating difference between two timestamps in R; NA appears alongside time difference output

我正在计算数据帧中两个时间戳之间的小时差。一个时间戳在前一行,即 lasttime,另一个在前一行,即 origtime。这是一个小例子:-

library(dplyr)
df<-structure(list(DateTime_Start = structure(c(1612284131.736, 1612296614.851
), tzone = "UTC", class = c("POSIXct", "POSIXt")), DateTime_End = structure(c(1612284195.736, 
                                                                              1612296715.851), tzone = "UTC", class = c("POSIXct", "POSIXt"
                                                                              ))), row.names = c(NA, -2L), class = "data.frame")

df

#       DateTime_Start        DateTime_End
#1 2021-02-02 16:42:11 2021-02-02 16:43:15
#2 2021-02-02 20:10:14 2021-02-02 20:11:55

lasttime<-lag(df$DateTime_End)
lasttime
#[1] NA                        "2021-02-02 16:43:15 UTC"

origtime<-lead(df$DateTime_Start)
origtime
#[1] "2021-02-02 20:10:14 UTC" NA

您可以注意到 returns lasttimeorigtime 的每个 运行 旁边的一个 NA,似乎是另一个时间戳的占位符df 内的行。然后当我尝试计算 difftime 时,我得到这个:-

difftime(origtime,lastime)
#Time differences in secs
#[1] NA NA

我认为这是由 origtimelasttime 中的 NA 引起的。谁能指出一个解决方案来区分这两个日期时间对象?

非常感谢!

Lag 和 Lead 正在查找之前和未来的时间戳。如果没有,那么他们 return NA。如果那不是您想要的行为,您想要什么行为?

您有 4 个时间戳。我完全不知道你想用什么来计算差异!

您是否要计算第一个开始时间和最后一个结束时间之间的差异?

difftime(min(df$DateTime_Start), max(df$DateTime_End))

如果您向数据中添加第三行,您会得到中间行的 difftime。添加 200 行,您将获得 200 个结果和两个 NA。

默认情况下,lag 的第一个值和 lead 的最后一个值始终为 NA。由于 lag 中第一行没有前一个值,lead 中最后一行没有下一个值。

您需要更改 default 值以获得不是 NA 的值。例如,要获得 0 作为第一个值,您可以执行 -

library(dplyr)

df %>%
  mutate(difference = difftime(DateTime_Start, lag(DateTime_End, default = first(DateTime_Start)), units = 'hours'))

#       DateTime_Start        DateTime_End     difference
#1 2021-02-02 16:42:11 2021-02-02 16:43:15 0.000000 hours
#2 2021-02-02 20:10:14 2021-02-02 20:11:55 3.449754 hours

在第二行中,您正在计算 DateTime_Start[2] - DateTime_End[1]。如果您在第 3 行中有超过 2 行,您将获得 DateTime_Start[3] - DateTime_End[2] 等的输出。