as.Date在转换'ddmmmyyyy'时返回NA

Ric*_*bby 20 r date r-faq

我正在尝试将字符串"2013-JAN-14"转换为日期,如下所示:

sdate1 <- "2013-JAN-14"
ddate1 <- as.Date(sdate1,format="%Y-%b-%d")
ddate1
Run Code Online (Sandbox Code Playgroud)

但我得到:

[1] NA
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么 ?我应该为此安装一个包(我尝试安装chron).

NPE*_*NPE 24

适合我.它不适合您的原因可能与您的系统区域设置有关.

?as.Date 有以下说法:

## This will give NA(s) in some locales; setting the C locale
## as in the commented lines will overcome this on most systems.
## lct <- Sys.getlocale("LC_TIME"); Sys.setlocale("LC_TIME", "C")
x <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
z <- as.Date(x, "%d%b%Y")
## Sys.setlocale("LC_TIME", lct)
Run Code Online (Sandbox Code Playgroud)

值得一试.

  • 我今天遇到了类似的NA问题,当我回到我的CSV文件时,我发现Date单元格的格式化处于"自定义"模式而不是日期模式(在Excel中).在我将其更改为日期之后,`as.Date`命令工作得很好.我知道你的问题已经解决了,但我只是想为这个问题提出另一种可能的情况. (4认同)

小智 7

我的解决方案可能不适用于导致as.Date()返回NA的每个问题,但它确实对某些问题有效,即,当以因子格式读入Date变量时.

只需在.csv中读取stringsAsFactors = FALSE即可

data <- read.csv("data.csv", stringsAsFactors = FALSE)
data$date <- as.Date(data$date)
Run Code Online (Sandbox Code Playgroud)

在尝试(并且失败)使用我的系统区域设置解决NA问题后,此解决方案对我有用.


Nak*_*akx 5

如果您尝试你的类的日期转换也会发生这种情况factor到类的日期 Date。您需要先转换为,POSIXt否则as.Date不知道字符串的哪一部分对应于什么。

错误的方式:从因子到日期的直接转换:

a<-as.factor("24/06/2018")
b<-as.Date(a,format="%Y-%m-%d")
Run Code Online (Sandbox Code Playgroud)

您将获得以下输出:

a
[1] 24/06/2018
Levels: 24/06/2018
class(a)
[1] "factor"
b
[1] NA
Run Code Online (Sandbox Code Playgroud)

正确的方法,将因子转换为POSIXt,然后转换为日期

a<-as.factor("24/06/2018")
abis<-strptime(a,format="%d/%m/%Y") #defining what is the original format of your date
b<-as.Date(abis,format="%Y-%m-%d") #defining what is the desired format of your date
Run Code Online (Sandbox Code Playgroud)

您将获得以下输出:

abis
[1] "2018-06-24 AEST"
class(abis)
[1] "POSIXlt" "POSIXt"
b
[1] "2018-06-24"
class(b)
[1] "Date"
Run Code Online (Sandbox Code Playgroud)