如何解决如何在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"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。