【问题标题】:R: Convert date column of data table [duplicate]R:转换数据表的日期列[重复]
【发布时间】:2015-02-21 14:16:34
【问题描述】:

我有一个 CSV 表,其中包含一个包含不同格式日期字符串的日期列。我想编写一个小函数,尝试将这些字符串转换为日期对象。这个想法是尝试不同的日期格式,直到可以解析日期:

parseDate <- function(date){
  formats <- c("%d.%m.%y %H:%M", "%Y-%m-%d %H:%M:%S", "%m-%d-%Y-%H:%M:%S")

  for(format in formats){
    newDate <- strptime(date, format=format)
    if(!is.na(newDate)){
      return(newDate)
    }
  }

  print(paste0("Invalid input: ", date))
  return(NA)
}

column1 <- c("2014-11-14 14:20:16", "24.11.14 9:48", "24.11.14 9:49")
table <- data.frame(column1)

table$column1 = lapply(table$column1, FUN = parseDate)

问题是我找不到将此函数应用于列的正确方法。我试过lapplyapplyby,但这些函数都没有提供所需的输出。你能帮帮我吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    也许是这样的:

    > do.call("c", lapply(table$column1, FUN = parseDate))
    [1] "2014-11-14 14:20:16 AEDT" "2014-11-24 09:48:00 AEDT"
    [3] "2014-11-24 09:49:00 AEDT"
    

    【讨论】:

      【解决方案2】:

      您可以尝试parse_date_time,它可以采用多种“格式”

      library(lubridate)
      parse_date_time(table$column1, c("%d.%m.%y %H:%M", "%Y-%m-%d %H:%M:%S", 
                 "%m-%d-%Y-%H:%M:%S"))
      #[1] "2014-11-14 14:20:16 UTC" "2014-11-24 09:48:00 UTC"
      #[3] "2014-11-24 09:49:00 UTC"
      

      【讨论】:

        猜你喜欢
        • 2017-12-30
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 2015-08-08
        • 1970-01-01
        • 1970-01-01
        • 2019-07-18
        • 2014-07-29
        相关资源
        最近更新 更多