无法将不同格式的矢量转换为 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)
我有一个包含 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)