如何在r中将false不存在字符列排列为日期?类似在r中将字符列转换为日期

问题描述

ymd("2011-11-31") 
All formats failed to parse. No formats found.[1] NA

2011-11有30天而不是31天,因此ymd处于失败状态。 我的数据在这样的日期列中有一些错误的日期,我想学习优雅的处理方式。 是否有数据可以像“ 2011-12-01”那样转换的软件包或功能?

解决方法

这里的答案类似,但也适用于滚动的月份和年份

library(lubridate)
d <- c("2011-11-31",'2011-13-04','2011-12-32')

parse_false_date <- function(d) {
  x <- strcapture("(\\d{4})-(\\d{2})-(\\d{2})",d,data.frame(y=integer(),m=integer(),d=integer()))
  make_date(x$y)+months(x$m-1)+days(x$d-1)
}

parse_false_date(d)
#> [1] "2011-12-01" "2012-01-04" "2012-01-01"
,

我不知道,但是您可以定义自己的函数来处理它。
在这里,我使用日期的年月部分,然后加上天数,并根据需要将其包装到下个月(甚至是年份)。

# two invalid,one valid date
x <- c("2011-11-31","2000-04-31","2010-01-10","2011-12-32")

parse_bad_dates <- function(x) {
  as.Date(paste(substr(x,1,7),"1"),format="%Y-%m %d") +
  as.numeric(substr(x,9,10)) - 1
}

parse_bad_dates(x)
#[1] "2011-12-01" "2000-05-01" "2010-01-10" "2012-01-01"

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...