R时间间隔数据类型

R time interval data type

R中有时间间隔数据(变量)类型吗?我有一个包含日期时间和时间间隔列的 CSV 文件。 datetime 列的数据类型可以是POSIXlt,但我不知道如何为另一列设置timeinterval 数据类型。有可能吗,或者在 R 中处理时间间隔的最佳方法是什么?

我的 CSV 文件中的时间间隔值如下所示 [<number of days> %H:%M:%S]:

'0 20:32:59'

在Pythonpandas中,有一个timedelta64[ns]时间间隔数据类型。

谢谢!

是的,见? difftime

如果您的 csv 已拆分为多列,请将 as.difftime 应用于一列,将 as.POSIXlt 应用于另一列。

例如:

as.difftime(0, units="days") + as.POSIXlt("20:32:59", format="%H:%M:%S")

[编辑] 如果整个结果是一个区间,可以这样做:

as.difftime(0, units="days") + as.difftime("20:32:59", format="%H:%M:%S")

将字符串拆分为天数和时间,使用 stringi,然后使用 lubridate 来操作组件。

library(stringi)
library(lubridate)

在下面的例子中:

  • ([0-9]+)表示捕获一位或多位数字。
  • +表示一个或多个空格(未捕获)。
  • ([0-9]{2}:[0-9]{2}:[0-9]{2}) 表示捕获 2 个数字、一个冒号、2 个数字、另一个冒号和另外 2 个数字。

x <- "0 20:32:59" matches <- stri_match_first_regex(x, "([0-9]+) +([0-9]{2}:[0-9]{2}:[0-9]{2})")

天数在第二列,hours/minutes/seconds在第三列。

days创建一个天数的周期; hms 创建一个小时、分钟和秒的时间段。

n_days <- days(as.integer(matches[, 2]))
time <- hms(matches[, 3])

现在你的总数只是 n_days + time,虽然你可能希望它相对于某个来源,例如:

Sys.time() + n_days + time