首页 > 解决方案 > 将字符时间段(以奇怪的格式)转换为 R 中的日期和时间

问题描述

我有一个“ 01jan1990 1 a.m. to 2 p.m.”等形式的字符向量,并希望将其转换为单独的日期和时间,其中时间是范围的开始和结束。到目前为止,我习惯于strsplit在“to”处将其分开,然后尝试在下半部分使用 parse_date_time,但我最终得到了这样的结果0000-01-01 14:00:00 UTC。我什至不知道如何转换前半部分。

R 中的函数似乎不支持这种格式。我很困扰。任何帮助,将不胜感激

标签: r

解决方案


从输入给定中删除所有点s1,然后1 am to从给定 s2 中删除。我们现在可以将这两个转换为 POSIXct 给出 t1 和 t2 并从中提取日期和时间。我们已经为问题中的输入展示了这一点,但如果 s 是此类输入的字符向量,它将继续工作。不使用任何包。

s <- "01jan1990 1 a.m. to 2 p.m"

s1 <- gsub("\\.", "", s)
s2 <- sub("\\d+ \\S+ to ", "", s1)

fmt <- "%d%b%Y %I %p"
t1 <- as.POSIXct(s1, format = fmt)
t2 <- as.POSIXct(s2, format = fmt)

as.Date(t1); as.Date(t2)
## [1] "1990-01-01"
## [1] "1990-01-01"

sub(".* ", "", format(t1)); sub(".* ", "", format(t2))
## [1] "01:00:00" 
## [1] "14:00:00"

推荐阅读