【问题标题】:as.Date giving me NA'sas.Date 给我 NA
【发布时间】:2021-03-12 15:31:07
【问题描述】:

我已经尝试了此线程 as.Date returning NA while converting from 'ddmmmyyyy' 中的所有内容来尝试解决我的问题。

我正在使用这些命令将一个因素变成一个日期:

cohort$doi <- as.Date(cohort$doi, format= "%Y/%m/%d")

我所有的日期目前都采用以下格式:YYYY-MM-DD,据我所知,以上应该可以工作

我昨天使用此代码将各种变量的所有日期从一个因素转换为一个日期。它昨天工作,一切都很好。今天我打开了我的脚本并导入了我的数据,运行了这个命令并查看了我的数据,但现在所有的日期都显示为 NA。

我已经尝试了以前线程中的所有内容(我查看的不仅仅是我上面链接的那个),但到目前为止没有任何效果。我不知道现在该怎么办

doi 列的外观示例:

1970-01-01

1970-02-02

1970-03-03

1970-04-04

该列当前被归类为一个因素。当我执行上面使用的代码时,该列被定义为日期,但所有日期现在都说 NA 除了关闭 R 并在今天再次打开它之外,我什么也没做。

【问题讨论】:

  • 请发布您的数据样本cohort$doi 和复制您的问题的相应代码。从昨天到今天,您的代码不太可能有所不同,而是您通过重新启动程序清除了环境。在How to make a great R reproducible example 上阅读这个 SO 问题。
  • @LMc 我刚刚添加了列的样例,上面已经提到了代码。我猜它一定是我清除的东西,但我无法弄清楚它可能是什么,因为我在我的代码中以同样的方式阅读了
  • 如果您发布的内容与您的数据相同,那么class(cohort$doi) 不能是数字。它可以是日期或字符。
  • 您还错误地指定了 format 参数,这就是您收到 NA 的原因。
  • 我的数据确实看起来像那样(只是日期不同),R 说这是一个因素。那么格式应该如何呢?

标签: r as.date


【解决方案1】:

如果您阅读as.Date 的文档,您会注意到默认格式是%Y-%d-%m%Y/%d/%m

默认格式遵循 ISO 8601 国际标准的规则,将一天表示为“2001-02-03”。

在您的代码中,您已指定日期格式为斜杠,但您的示例数据显示日期格式为as.Date 使用的默认格式:

doi <- as.factor(c("1970-01-01",
                   "1970-02-02",
                   "1970-03-03",
                   "1970-04-04"))

as.Date(doi) # default format %Y-%m-%d
[1] "1970-01-01" "1970-02-02" "1970-03-03" "1970-04-04"

as.Date(doi, format = "%Y/%m/%d") # incorrect specification of your date format
[1] NA NA NA NA

as.Date("1970/01/01") # also a default format
[1] "1970-01-01"

注意:as.Date 接受字符串、因子、逻辑 NA 以及“POSIXlt”和“POSIXct”类的对象。

【讨论】:

  • 所以如果日期已经是正确的默认格式,我可以忽略 format= 部分吗?
  • 是的,没错。它必须是那种格式,否则您必须正确指定它。否则,还有像 lubridate 这样的其他包具有 guess_format 的功能。
猜你喜欢
  • 1970-01-01
  • 2022-12-05
  • 2022-11-16
  • 2021-11-21
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 2017-04-15
  • 2016-11-16
相关资源
最近更新 更多