无法将不同格式的矢量转换为 POSIXct

Cannot convert vector of different formats to POSIXct

我有一个包含 CHAR 格式日期的数据集,我想将其转换为 POSIXct。日期始终采用五种格式之一,但对于本例,两种格式就足够了:

test <- c("15/03/19 17:16", "15/03/19,17:16", "15/03/19,17:16")
formats <- c(
    "%d/%m/%y,%H:%M",
    "%d/%m/%y %H:%M",
    "%d/%m/%Y,%H:%M",
    "%d/%m/%Y %H:%M",
    "%Y%m%d%H%M%S"
)

as.POSIXct(test[1], tz = "GMT", tryFormats = formats) # works
as.POSIXct(test[2:3], tz = "GMT", tryFormats = formats) # works
as.POSIXct(test, tz = "GMT", tryFormats = formats)    # fails

两个日期单独转换没有问题。当向量(或者在我的例子中,通过 mutate 的数据表)通过 as.POSIXct 时,会生成以下错误:

Error in as.POSIXct.character(x, tz, ...) : character string is not in a standard unambiguous format

据推测,as.POSIXct 仅在 tryFormat 中选择一种格式,并试图将其应用于整个集合,但这是行不通的。

我唯一的选择是创建一个空白列并手动遍历每一行来填充它吗?

示例日期:

15/03/19 17:16
15/03/19,17:16
15/03/2019 17:16
15/03/2019,17:16
20190315171600GS

尝试 lubridate::dmy_hm 两者都适用。我相信你的 formats 也需要更正。

formats <- c("%d/%m/%y,%H:%M", "%d/%m/%y %H:%M")

lubridate::dmy_hm(test)
#[1] "2019-03-15 17:16:00 UTC" "2019-03-15 17:16:00 UTC" "2019-03-15 17:16:00 UTC"

anytime

anytime::addFormats(formats)
anytime::anytime(test)

如果我们需要明确指定格式,我们也可以使用parse_date_time

lubridate::parse_date_time(test, formats)