as.Date() 不适用于五月或十月日期

问题描述 投票:0回答:2

在下面的代码中,对于涉及“五月”和“十月”的日期,我得到 NA。我在这里缺少什么?

dates <- paste0("1", month.abb, "1960")
dates
#  [1] "1Jan1960" "1Feb1960" "1Mar1960" "1Apr1960" "1May1960" "1Jun1960" "1Jul1960" "1Aug1960" "1Sep1960" "1Oct1960" "1Nov1960" "1Dec1960"
as.Date(dates, format = "%d%b%Y")
#  [1] "1960-01-01" "1960-02-01" "1960-03-01" "1960-04-01" NA           "1960-06-01" "1960-07-01" "1960-08-01" "1960-09-01" NA           "1960-11-01" "1960-12-01"
r
2个回答
3
投票

"LC_ALL"
设置为
"C"
。仅对于当前脚本,您可以使用
Sys.setlocale()

> invisible(Sys.setlocale('LC_ALL', 'de_CH.UTF-8'))  ## you probably have "de_DE.UTF-8"
> as.Date('1May1960', format = "%d%b%Y")
[1] NA
> Sys.setlocale('LC_ALL', 'C')
[1] "C"
> as.Date('1May1960', format = "%d%b%Y")
[1] "1960-05-01"

要使其永久化,请使用以下条目编辑/创建

~/.Renviron
文件:

LC_ALL=C

C表示与C语言相同的设置,即英文。


0
投票

此解决方案独立于语言环境。它基于以下事实:无论语言环境如何,内置

month.abb
始终为英语。

library(stringi)

x |>
  stri_replace_all_fixed(month.abb, paste0("-", 1:12, "-"),
    vectorize_all = FALSE) |>
  as.Date("%d-%m-%y")
## [1] "2019-05-01"
© www.soinside.com 2019 - 2024. All rights reserved.