【问题标题】:replace NA in date column with blank将日期列中的 NA 替换为空白
【发布时间】:2015-09-23 02:36:43
【问题描述】:

我的数据框中有一个日期列,其中包含一些 NA 值。我正在尝试使用命令df$FirstDate[is.na(df$FirstDate)] <- " "
将此 NA 值替换为空白 我收到一个错误

charToDate(x) 中的错误:字符串不是标准的明确格式

不确定如何解决此错误。非常感谢有关此主题的任何帮助。

这是日期列的dput 输出

df = structure(c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), class = "Date")

【问题讨论】:

  • 我们无法看到一些数据,请尝试将 dput(df$FirstDate) 添加到您的问题中
  • 你真的有NA还是<NA>
  • @Pascal,我的日期列中有 NA
  • as.Date() 知道如何管理NA。查看as.Date(NA) 的输出。但是这个函数需要一个特定的字符结构,来强制这个字符成为日期。 " " 是一个字符,没有明显的结构,as.Date() 不知道如何处理这个问题,即as.Date(" ") 给出了你提到的同样的错误。
  • @Pascal,很好的答案。我现在看到了我的问题。

标签: r date missing-data


【解决方案1】:

您的df$FirstDate 列属于Date 类。

这意味着您尝试在此列中分配的任何非NA 值都将被强制转换为Date 类,并且在强制转换过程中您会看到此错误,因为字符串" " 不在用于转换为 Date 类的标准明确格式。

如果您完全决定用空格替换NAs,请先将df$FirstDate 列转换为character 类,如下所示:

> df$FirstDate <- as.character(df$FirstDate)

现在,继续运行:

> df$FirstDate[is.na(df$FirstDate)] <- " "

【讨论】:

  • 我知道,我对将 date 转换为 char 并不太兴奋,我必须处理格式、来源和这些问题,同时稍后再将 char 转换为 date,我更喜欢在带有上课日期的列。
  • 你能提供一些动机来解释为什么你想用这个特定的字符串 " " 替换 NAs 吗?
  • 来自Date 类的文档:“日期表示为自 1970 年 1 月 1 日以来的天数,较早的日期为负值......是一个整数......”如果你想将一个字符串插入到 Date 向量中,你需要将它强制转换到类 character 中。如果您不喜欢 NAs 的外观,则必须估算缺失值或将其替换为标准缺失值,例如 1970-01-01
  • 我在这里看到了问题,您和 Pascal 完美地解释了这一点。我现在不太热衷于用空白替换 NA。我的首要任务是保留上课日期,转换为 char,然后替换 NA 工作量太大。我很好
【解决方案2】:

我也有类似的外观问题。

尝试将该列转换为as.character.Date

df$FirstDate <- as.character.Date(df$FirstDate)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 2023-03-28
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多