将字符转换为日期时忽略错误

时间:2019-06-06 07:16:52

标签: r date format

我有一个“字符列”,主要包含DateNum模式中的日期(例如41269、44294、43057等)。不幸的是,由于在源头缺少验证,因此那里还有一些错误的值,例如“-”或“ 03/012025”

我正在尝试将这些转换为标准日期,同时忽略无效值。我不想丢失包含数据的行,但很高兴丢失值或将其替换为NA

目前,我已经尝试了两种方法来实现此目的,但都无法使其正常工作

目前,我的方法是找到一种仅格式化数字值的方法,而不是导航列出所有无效字符(因为上述无效字符可能无法涵盖所有​​字符)

为此,我一直在使用以下代码:

transformed_data$Expiry_Date<-format(as.Date(transformed_data$Expiry_Date ,optional=TRUE, tryFormats = "", origin="1899-12-30"))

但是,我似乎无法找到仅包含数字值格式的tryFormats中包含的格式示例。到目前为止,我发现的所有示例均涉及特定的DDMMYY格式

我还研究了使用NA_IF清理数据,然后将其格式化为日期(见下文)

transformed_data$Expiry_Date<-na_if(transformed_data$Expiry_Date, is.numeric(transformed_data$Expiry_Date))

但是,这似乎对结果没有任何影响。

我希望将当前具有DateNum样式的值显示为日期,并将所有无效数据替换为NA(或留空)

如此处所建议的,这是一个产生问题的代码片段。

x <- c("41269","-","44294","03/012025","43057")
y<-format(as.Date(as.integer(x), origin="1899-12-30"))

以上内容包括@Rohit建议的更改,以包含“ as.integer”。在执行此操作的同时,还会生成警告“强制引入的不适用”

1 个答案:

答案 0 :(得分:0)

根据@Rohit的建议,我使用以下代码添加了“ as.integer”以实现所需的输出:

x <- c("41269","-","44294","03/012025","43057")
y<-format(as.Date(as.integer(x), origin="1899-12-30"))

虽然这会产生有关“强制引入NA的警告”,但这不会影响结果。如果需要,我还可以使用preventWarnings来防止显示警告(见下文)

y<-suppressWarnings(format(as.Date(as.integer(x), origin="1899-12-30")))

感谢您帮助我解决此问题