首页 > 解决方案 > 如何用特定值替换日期中的所有日期值?

问题描述

我有以下 m/d/y 格式的日期向量:

(dates<-c("1/31/2018", "2/31/2018", "3/0/2018", "4/31/2018", "9/5/2018"))
[1] "1/31/2018" "2/31/2018" "3/0/2018" "1/5/2018"

如果您仔细观察,其中一些日期是荒谬的 - 例如,二月没有 31 天,并且 0 不是一个月中的有效日期。我想用“1”替换所有天的值。我希望我的结果如下所示:

dates
[1] "1/1/2018" "2/1/2018" "3/1/2018" "4/1/2018" "9/1/2018"

标签: rdate

解决方案


要转换坏的只有首先尝试转换为Date类,如果这给了 NA 替换中间部分。

ifelse(is.na(as.Date(dates, "%m/%d/%Y")), sub("/.*/", "/1/", dates), dates)
## [1] "1/31/2018" "2/1/2018"  "3/1/2018"  "4/1/2018"  "9/5/2018" 

或全部转换:

sub("/.*/", "/1/", dates)
## [1] "1/1/2018" "2/1/2018" "3/1/2018" "4/1/2018" "9/1/2018"

这是转换所有这些的第二种方法:

with(read.table(text = dates, sep = "/"), paste(V1, 1, V3, sep = "/"))
## [1] "1/1/2018" "2/1/2018" "3/1/2018" "4/1/2018" "9/1/2018"

推荐阅读