我有以下格式为 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"
最佳答案
要转换坏的,只需首先尝试转换为 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"
关于r - 如何用特定值替换日期中的所有日期值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55269971/