【问题标题】:as.Date returning NA while converting from 'ddmmmyyyy'as.Date 在从 'ddmmmyyyy' 转换时返回 NA
【发布时间】:2021-09-07 20:10:30
【问题描述】:

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

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

但我明白了:

[1] NA

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

【问题讨论】:

    标签: r date r-faq


    【解决方案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)
    

    值得一试。

    【讨论】:

    • 我今天遇到了类似的 NA 问题,当我返回我的 CSV 文件时,我发现日期单元格的格式处于“自定义”模式而不是日期模式(在 Excel 中)。在我将其更改为最新之后,as.Date 命令工作得很好。我知道您的问题已解决,但我只是想介绍此问题的另一种可能情况。
    【解决方案2】:

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

    只需使用 stringsAsFactors=FALSE 读取 .csv

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

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

    【讨论】:

      【解决方案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"
      

      【讨论】:

      • 谢谢@Nakx 使用 POSIXt 的方法因素!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 2021-05-03
      • 2017-04-15
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多