【问题标题】:R date parsing using read_excel functionR日期解析使用read_excel函数
【发布时间】:2019-10-04 05:16:50
【问题描述】:

使用 read_excel 函数时,电子表格中 FuelEventDateTime 列中的日期格式为“dd/mm/yyyy hr:mm:ss”(例如:03/05/2019 9:19:00 AM)解析为具有如下格式的字符串:示例:43588.849xxxxx(x 为任意数字)。我无法将此列设置为正确的日期类,我不知道该数字的含义,但在 Excel 中已经多次看到它。

试图将“.”分开在字符串中,将列设置为.numeric,并尝试了lubridate,R base和anydate库中的几个函数,因为该数字可能是起源“1900-01-01”中的纪元格式的日期

读取数据

sys_raw <- read_excel("Advanced Fill-Ups Report 15052019_165240.xlsx", sheet = "Data", col_names = FALSE) 

col_names_sys <- sys_raw[11,] 

sys_tidy <- sys_raw[12:ncol(sys_raw),] %>% 
  setNames(col_names_sys) %>% 
  select(DeviceName, FuelEventDateTime,FuelUsedEventDistance)

注意到字符串为数字,尝试单独的“。”并设置为数字

sys_tidy <- sys_tidy %>% 

  mutate(FuelEventDateTime = str_split(FuelEventDateTime, "\\.")) %>% 

  separate(FuelEventDateTime, c("c","date","time")) %>% 

  separate(DeviceName, c("Device"), sep = "\\s") %>% 

  select(Device, date, FuelUsedEventDistance) %>% 

  mutate(date = as.numeric(date)) 

sys_tidy <- sys_tidy %>% 

  as.Date(date, origin = "1900-01-01") 

这个实际结果是错误的,预期结果是日期类格式为“dd/mm/yyyy”的列日期,不需要时间。

错误信息示例:

as.Date.default(., date, origin = "1900-01-01") 中的错误:不知道如何转换 '.'到“日期”类

as.POSIXct.default(., date, origin = "1900-01-01") 中的错误:不知道如何转换 '.'到类“POSIXct”

【问题讨论】:

    标签: r date readxl


    【解决方案1】:
    sys_tidy <- sys_tidy %>% 
       as.Date(date, origin = "1900-01-01") 
    

    你可能是说

    sys_tidy <- sys_tidy %>% 
       mutate(date = as.Date(date, origin = "1900-01-01"))
    

    否则,您会将数据框插入as.Date 的第一项,而 R 不知道如何处理它。来自 ?as.Date:as.Date 方法接受字符串、因子、逻辑 NA 和类“POSIXlt”和“POSIXct”的对象。

    【讨论】:

      猜你喜欢
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多