R中是否有时间间隔数据(变量)类型?我有一个包含datetime和timeinterval列的CSV文件。 datetime列的数据类型可以是POSIXlt
,但我不知道如何为另一列设置timeinterval数据类型。是否可能,或者在R中处理时间inerval的最佳方法是什么?
我的CSV文件中的时间间隔值如下所示[<number of days> %H:%M:%S
]:
'0 20:32:59'
在Python pandas中,时间间隔有timedelta64[ns]
数据类型。
谢谢!
答案 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")