regexp-在月份和日期R中取零

时间:2018-11-28 13:35:08

标签: r regex date regex-negation

我有许多来自USGS网站的日期向量。 一些日期如下所示: “ 1981-00-00”,或类似这样:“ 1981-01-00”。 我想找到这些不可能的日期,只要在我有“ 00”的地方输入“ 01”即可。 这就是我所做的:

date <- c("1981-01-23","1981-00-02","2000-01-00","1900-00-00","1999-12-31")
month_regex <- "0?[1-9]|1[0-2]"
day_regex <- "0?[1-9]|[12]\\d|30|31"
tmp_date <- as.character(date)
tmp_month <- substr(tmp_date,6,7)
if (!all(grepl(month_regex,tmp_month))){
  substr(tmp_date[!grepl(month_regex,tmp_month)],6,7) <- "01"
}
tmp_day <- substr(tmp_date,9,10)
if (!all(grepl("0?[1-9]|[12]\\d|30|31",tmp_day))){
  substr(tmp_date[!grepl("0?[1-9]|[12]\\d|30|31",tmp_day)],9,10) <- "01"
}
print(tmp_date)

这似乎可行,但是我想知道用替换的一行还是两行是否可行。 我正在考虑以下方面的事情:

  grepl(".+[-](?!00).+[-](?!00).+",tmp_date,perl = TRUE)

但是无法使其正常工作。

1 个答案:

答案 0 :(得分:1)

由于要在任何地方替换-00,因此应该使用相对简单的gsub("-00","-01",x)

date1 <- c("1981-01-23","1981-00-02","2000-01-00",
           "1900-00-00","1999-12-31")
date1.fix <- gsub("-00","-01",date1)
##[1] "1981-01-23" "1981-01-02" "2000-01-01" "1900-01-01" "1999-12-31"

如果这对您没有帮助,或者结果不是您想要的,则您必须编辑问题以阐明/给出可重复使用的不起作用示例...