【问题标题】:In R, unambiguous format error when removing "NA"在 R 中,删除“NA”时出现明确的格式错误
【发布时间】:2016-01-26 01:25:13
【问题描述】:

我正在尝试将列的 NA 值简单地转换为空白,以便为 Excel 导出做准备。我的代码返回以下错误:

> class(manifest_final$MIN_SAIL_DATE)
[1] "Date"
> head(manifest_final$MIN_SAIL_DATE)
[1] "2016-10-23" NA           "2016-10-23" NA           NA           NA          
> manifest_final$MIN_SAIL_DATE[is.na(manifest_final$MIN_SAIL_DATE)] <- ''
Error in charToDate(x) : 
  character string is not in a standard unambiguous format

MIN_SAIL_DATE 列实际上是来自 sqlQuery{RODBC} 函数的计算列,然后将 {plyr} 连接到另一个表。该列最初是 POSIX 格式,我将其强制为 Date。

编辑:::

以下代码在查询数据后立即执行时解决了我的 NA 问题:

next_sail$MIN_SAIL_DATE <- as.character.Date(next_sail$MIN_SAIL_DATE)

以下连接用于将next_detail 中的两个详细信息列附加到person_numMIN_SAIL_DATE 上的manifestMIN_SAIL_DATE=SAIL_SAIL_DATE

manifest <- merge(manifest, next_detail, by.x = c('PERSON_NUM', 'MIN_SAIL_DATE'), by.y= c('PERSON_NUM', 'SAIL_SAIL_DTE'), all.x = TRUE)

如果在加入之前发生格式更改,我会丢失 NA,但也会丢失附加数据。在合并后移动格式更改时,我得到原始的Error in as.POSIXlt.character(x, tz, ...) : character string is not in a standard unambiguous format

数据示例如下。然后 NA 被删除,我从连接中丢失了带圆圈的代码。我假设它是格式问题

code snippet

【问题讨论】:

  • 您有两个选择,第一个是您可以使用write.tablena='' 选项(或您正在使用的任何写入功能)。在将NA 设置为空字符串之前,您还可以将manifest_final$MIN_SAIL_DATE 转换为字符向量。它之所以抱怨,是因为您试图将 Date 向量的某些元素设置为空字符串。第一个选择可能是最好的。默认为na = "NA",只需将其设置为空字符串即可。
  • 完美。我想问题只是源于我对错误的误解。我将列更改为字符格式,我们都很好。谢谢

标签: r


【解决方案1】:

对于您正在使用的写入功能(例如write.csv),请使用na 选项,如下所示设置NA 字符

write.csv(manifest_final, your_output_file, na = '')

您当然可以在write.csv 中包含您正在使用的任何其他选项。该选项在其他 write.* 函数中也应该可用。

编辑

的问题
manifest_final$MIN_SAIL_DATE[is.na(manifest_final$MIN_SAIL_DATE)] <- ''

是您试图将Date 向量元素设置为character 字符串。

虽然,我认为上述解决方案(使用na=)是可行的方法,您也可以将MIN_SAIL_DATE 列转换为字符串,然后将NA 列设置为空字符串。

【讨论】:

  • 这个答案没有明确解决我的问题,因为我没有使用 write.csv 但上述将列转换为字符的建议解决了我的问题
  • @Gino 其他write.* 函数也应该支持na= 选项,你在使用其中一个吗?如果是这样,那比更改数据类型更容易;一般来说,您有许多不同类型的列,其中包含 NA。
  • 我没有在 COMCreate 中使用打开 excel、将数据写入文件、保存和发送电子邮件的功能。我不知道那里是否存在 na= 选项,但我不相信。此外,我的格式仍然存在问题,因为当我将其更改为字符时,我的合并无法正确编译。当我在合并后格式化时,我仍然得到错误
  • @Gino 我不清楚你有什么问题,这和原来的问题一样吗?
  • 是的,我将列更改为字符并且能够删除 NA,但是由于格式不是原始的,我的联接(未图示并且在格式更改之后发生)没有返回任何数据。当我在代码中加入后移动格式更改时,我得到了正确的数据,但随后得到了上面发布的原始错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2014-10-11
  • 2017-08-08
  • 2019-08-27
  • 2014-01-10
相关资源
最近更新 更多