R时间间隔数据类型

时间:2016-08-12 15:01:00

标签: r types timedelta

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

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

'0 20:32:59'

在Python pandas中,时间间隔有timedelta64[ns]数据类型。

谢谢!

2 个答案:

答案 0 :(得分:1)

使用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})")

天数是第二列,小时/分钟/秒是第三列。

days创建一段天数; hms会创建一个小时,分钟和秒的时段。

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

现在你的总数只有n_days + time,但大概你想要这个相对于某个来源,例如:

Sys.time() + n_days + time

答案 1 :(得分:0)

是的,请参阅? 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")