-->

as.Date返回NA而从“ddmmmyyyy”转换(as.Date returning NA wh

2019-07-22 14:22发布

我想字符串“2013-JAN-14”转换成日期如下:

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

但我得到:

[1] NA

我究竟做错了什么 ? 我应该安装一个软件包用于此目的(我尝试安装代上)。

Answer 1:

我的作品。 它可能不适合你的原因与您的系统区域做。

?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)

值得一试。



Answer 2:

下面我的解决方案可能不适合)导致as.Date(返回NA的每一个问题的工作,但它的工作了一段,即,当在要素格式读取日期变量。

只需在与stringsAsFactors该.csv读= FALSE

data <- read.csv("data.csv", stringsAsFactors = FALSE)
data$date <- as.Date(data$date)

试图(和失败),与我的系统语言环境来解决问题NA后,该解决方案为我工作。



Answer 3:

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

错误方式:直接转换从因素日期:

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

你会得到作为输出:

a
[1] 24/06/2018
Levels: 24/06/2018
class(a)
[1] "factor"
b
[1] NA

正确的做法,转换因素纳入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

你会得到作为输出:

abis
[1] "2018-06-24 AEST"
class(abis)
[1] "POSIXlt" "POSIXt"
b
[1] "2018-06-24"
class(b)
[1] "Date"


文章来源: as.Date returning NA while converting from 'ddmmmyyyy'
标签: r date r-faq