【问题标题】:read dates from multiple excel files with different formats in R从R中不同格式的多个excel文件中读取日期
【发布时间】:2021-04-24 20:29:25
【问题描述】:

我正在尝试从不同的 excel 文件中读取日期,并且每个文件的日期都以不同的格式(字符或日期)存储。这使得每个文件上的日期列被读取为字符“28/02/2020”或数字转换 excel 对日期“452344”(自 1900 年以来的天数)进行读取

files1 = list.files(pattern="*.xlsx")
df = lapply(files1, read_excel,col_types = "text")
df = do.call(rbind, df)

¿如何让 R 读取字符类型“28/02/2020”而不是“452344”数字类型?

【问题讨论】:

    标签: r date


    【解决方案1】:

    对于一列中的多个日期格式,我建议使用lubridate::parse_date_time()(或任何其他将模糊格式转换为 NA 而不是打印错误消息的日期转换器)

    我假设您的 df 应该是这样的:

      # A tibble: 6 x 2
      id    date      
      <chr> <chr>     
    1 1     43889     
    2 2     43889     
    3 3     43889     
    4 1     28/02/2020
    5 2     28/02/2020
    6 3     28/02/2020
    

    那么你应该使用这个代码:

    library(lubridate)
    df <- as.data.frame(df)
    
    df$date2 <- parse_date_time(x = df$date, orders = "d m y") #converts rows like "28/02/2020" to date
    
    df[is.na(df$date2),"date2"] <- as.Date(as.numeric(df[is.na(df$date2),"date"]), origin = "1899-12-30") #converts rows like "43889"
    

    R 输出:

      id       date      date2
    1  1      43889 2020-02-28
    2  2      43889 2020-02-28
    3  3      43889 2020-02-28
    4  1 28/02/2020 2020-02-28
    5  2 28/02/2020 2020-02-28
    6  3 28/02/2020 2020-02-28
    
    str(df)
    
    'data.frame':   6 obs. of  3 variables:
     $ id   : chr  "1" "2" "3" "1" ...
     $ date : chr  "43889" "43889" "43889" "28/02/2020" ...
     $ date2: POSIXct, format: "2020-02-28" "2020-02-28" "2020-02-28" "2020-02-28" ...
    

    我知道这不是最好的解决方案,但它应该也适合你

    【讨论】:

    • 谢谢,但它不起作用,因为某些文件的日期列采用日期格式,而其他文件的日期存储为文本
    • 抱歉造成误会。我根据原始问题修改了我的答案。我觉得readxl不能识别不同的日期格式,但是导入后可以转换
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2023-03-26
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2020-10-12
    相关资源
    最近更新 更多