R as.date不与NA一起使用

时间:2018-02-01 10:26:36

标签: r date

我有两个函数,用于检测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()
           )
}

1 个答案:

答案 0 :(得分:0)

if只会检查并使用第一个元素,而您似乎希望使用给定sapply(date, ...

的矢量化版本

您可以通过完全删除外部if / else来修复它,您已经使用sapply

生成了TRUE和FALSE输出

编辑以下评论:

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")
  )))
}