我有两个函数,用于检测df中的列是否包含日期,然后将此列转换为时间戳。
但是,对于具有一些NA值的列,第一个函数返回false,即使某些值实际上是日期。我该如何解决?
is.Date <- function(date) {
if (sapply(date, function(x) {
!all(is.na(as.Date(
as.character(x),
format = c("%d/%m/%Y %H:%M", "%d/%m/%y %H:%M","%d/%m/%Y %H:%M:%S")
)))
})) {
return(TRUE)
} else {
return(FALSE)
}
}
fundate <- function(x) {
x <- x %>%
mutate_if(
is.Date,
.funs = . %>%
strptime(format = "%d/%m/%Y %H:%M") %>%
as.POSIXct()
)
}
答案 0 :(得分:0)
if
只会检查并使用第一个元素,而您似乎希望使用给定sapply(date, ...
您可以通过完全删除外部if / else
来修复它,您已经使用sapply
编辑以下评论:
is.Date <- function(column) {
!all(is.na(as.Date(
as.character(column),
format = c("%d/%m/%Y %H:%M", "%d/%m/%y %H:%M","%d/%m/%Y %H:%M:%S")
)))
}