【问题标题】:r - as.POSIXct returns unexpected NA (previous solutions don't apply to my case) [duplicate]r - as.POSIXct 返回意外的 NA(以前的解决方案不适用于我的情况)[重复]
【发布时间】:2019-04-21 17:38:17
【问题描述】:

我有一个包含 228 个观察值的数据集,指定“日期”的三列之一的格式如下:1999 年 12 月 2 日 1999 年 11 月 4 日 1999 年 10 月 7 日..... 我的目标是将其转换为这种格式:1999-12-02 (yyyy-mm-dd)。为此,我使用“as.POSIXct”函数,但所有 228 个观测值都得到“NA”。

我尝试了这段代码以及任何可能的差异(包括从以前的问题中得到的一些提示,类似于我的问题),例如“as.Date”、“strptime”等:

new_date <- as.POSIXct(ecb_result1$Date, format = "%Y-%m-%d")

正如我所说,我预计会看到从“1999 年 12 月 2 日”到“1999-12-02”的转换。相反,我得到了:

[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

有没有人可以帮助我了解问题所在以及如何解决?

【问题讨论】:

  • 使用正确的格式%d %B %Y
  • @akrun 没有变化,总是不适用
  • 如果显示的值是正确的,那么我无法重现它as.POSIXct("2 December 1999", format = "%d %B %Y")# [1] "1999-12-02 EST"
  • 这很有趣...我不明白as.POSIXct("2 December 1999", format = "%d %B %Y") [1] NA
  • 你是对的。区域设置是问题所在。非常感谢朋友!

标签: r datetime-conversion


【解决方案1】:

在这种情况下as.Dateas.POSIXct 的格式为"%e %B %Y"。但这取决于语言环境。在我的情况下,十月没有改变,因为我的语言环境是荷兰语。格式预计十月而不是十月。这也可能发生在您的情况下。我建议尝试 lubridate 的 dmy 函数。请参阅下面的示例。

dates <- c("2 December 1999", "4 November 1999", "7 October 1999")

# goes wrong for my locale
as.Date(dates, "%e %B %Y") # as.Date
[1] "1999-12-02" "1999-11-04" NA

as.POSIXct(dates, format = "%e %B %Y") # as.POSIXct
[1] "1999-12-02 CET" "1999-11-04 CET" NA    

但是 lubridate 的 dmy 函数对我有用。

lubridate::dmy(dates)
[1] "1999-12-02" "1999-11-04" "1999-10-07"

或者弄乱你的 Sys.setlocale 也可以:

Sys.setlocale("LC_TIME", "English_United Kingdom")

as.POSIXct(dates, format = "%e %B %Y")
[1] "1999-12-02 CET"  "1999-11-04 CET"  "1999-10-07 CEST"

【讨论】:

  • 非常感谢!解决了 'Sys.setlocale("LC_TIME", "English_United Kingdom")' 的问题。再次非常感谢!
猜你喜欢
  • 2012-11-23
  • 2019-08-18
  • 2020-11-07
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
相关资源
最近更新 更多