如。从“ddmmmyyyy”转换时返回 NA 的日期

as.Date returning NA while converting from 'ddmmmyyyy'

提问人:Ricky Bobby 提问时间:3/22/2013 最后编辑:David ArenburgRicky Bobby 更新时间:6/27/2018 访问量:86579

问:

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

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

但我得到:

[1] NA

我做错了什么?我应该为此目的安装一个包(我尝试安装 chron)。

日期 R-常见问题

评论


答:

34赞 NPE 3/22/2013 #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)

值得一试。

评论

10赞 LearneR 5/19/2015
我今天遇到了类似的NA问题,当我回到我的CSV文件时,我发现日期单元格的格式处于“自定义”模式而不是日期模式(在Excel中)。在我更改它之后,该命令工作得很好。我知道您的问题已解决,但我只是想为此问题提出另一种可能的情况。as.Date
8赞 kurt 6/10/2015 #2

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

只需在.csv中读取字符串AsFactors=FALSE

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

在尝试(并失败)解决我的系统语言环境的 NA 问题后,这个解决方案对我有用。

13赞 Nakx 6/27/2018 #3

如果您尝试将上课日期转换为上课日期,也会发生这种情况。你需要先转换成 否则不知道你的字符串的哪一部分对应什么。factorDatePOSIXtas.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"

评论

1赞 J.Rojas 4/1/2019
谢谢你@Nakx使用方法因素来POSIXt工作!