我将尝试检查给定日期是否为dd/mm/yyyy格式,在R语言中,同时也要检查它是否是有效的日期。我希望输出结果以TRUE或FALSE格式显示,例如:
输入:
输入:
date<- c('12/05/2016','35/11/2067','12/52/1000')
输出:
TRUE FALSE FALSE
date<- c('12/05/2016','35/11/2067','12/52/1000')
输出:
TRUE FALSE FALSE
You can use this function:
IsDate <- function(mydate, date.format = "%d/%m/%y") {
tryCatch(!is.na(as.Date(mydate, date.format)),
error = function(err) {FALSE})
}
IsDate(date)
[1] TRUE FALSE FALSE
代码的原始来源在这里。
.
tryCatch
起作用的例子吗? - talatIsDate("2020-08-05; SELECT * FROM db", "%Y-%M-%d")
的返回值为 TRUE。 - Jonas Lindeløv您还可以使用lubridate包:
library(lubridate)
!is.na(parse_date_time(c('12/05/2016','35/11/2067','12/52/1000'),orders="dmy"))
这是一个基于向量化的 R 基础函数,可以处理 NA
,并且能够防止 SQL 注入:
is_date = function(x, format = NULL) {
formatted = try(as.Date(x, format), silent = TRUE)
is_date = as.character(formatted) == x & !is.na(formatted) # valid and identical to input
is_date[is.na(x)] = NA # Insert NA for NA in x
return(is_date)
}
让我们试试:
> is_date(c("2020-08-11", "2020-13-32", "2020-08-11; DROP * FROM table", NA), format = "%Y-%m-%d")
## TRUE FALSE FALSE NA
!is.na(as.Date(date, format="%d/%m/%Y"))
- talat