R:如何将描述小时、分钟和秒的非直观字符串转换为可操作的POSIXct格式,以执行标准算术



我有一个R格式的数据集,其值为小时、分钟和秒格式。但是,有些值只有小时和分钟,有些只有分钟和秒,有些只有分,有些只有秒。它的格式也不太好。样本数据如下:

example <- as.data.frame(c("22h28m", "17m7s", "15m", "14s"))

我想把它转换成POSIXct格式,如下所示,目的是增加/减少时间:

列标题
22:28:00
00:17:07
00:15:00
00:00:14

也许parse_date_time来自lubridate

library("lubridate")
x <- c("22h28m", "17m7s", "15m", "14s")
y <- parse_date_time(x, orders = c("%Hh%Mm%Ss", "%Hh%Mm", "%Hh%Ss", "%Mm%Ss", "%Hh", "%Mm", "%Ss"), exact = TRUE)
y
## [1] "0000-01-01 22:28:00 UTC"
## [2] "0000-01-01 00:17:07 UTC"
## [3] "0000-01-01 00:15:00 UTC"
## [4] "0000-01-01 00:00:14 UTC"

要获取午夜后的秒数,可以执行以下操作:

y0 <- floor_date(y, unit = "day")
dy <- y - y0
dy
## Time differences in secs
## [1] 80880  1027   900    14

然后,您可以将dy添加到指定为长度为1的POSIXct对象的任何参考时间中。例如,当前时区中最近的午夜:

y0 <- floor_date(now(), unit = "day")
y0 + dy
## [1] "2022-02-03 22:28:00 EST"
## [2] "2022-02-03 00:17:07 EST"
## [3] "2022-02-03 00:15:00 EST"
## [4] "2022-02-03 00:00:14 EST"

更新

在更仔细地阅读了文档之后,我意识到lubridate实现了一种直接获得dy的方法。

dy <- duration(toupper(x))
dy
## [1] "80880s (~22.47 hours)"  "1027s (~17.12 minutes)" "900s (~15 minutes)"     "14s" 

然后,您可以按照上面的方法执行y0 + dy以获得POSIXct对象,如果您愿意,还可以获得

strftime(y0 + dy, "%T")
## [1] "22:28:00" "00:17:07" "00:15:00" "00:00:14"

以获得列出没有日期或时区的时间的字符矢量。

相关内容

最新更新