在下面的代码中,对于涉及“五月”和“十月”的日期,我得到 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"
将
"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语言相同的设置,即英文。
此解决方案独立于语言环境。它基于以下事实:无论语言环境如何,内置
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"