R 日期解析使用 read_excel 函数

R date parsing using read_excel function

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

中多次看到它

试图分隔“.”在字符串中,设置列 as.numeric,并尝试了 lubridate、R base 和 anydate 库中的几个函数,因为该数字可能是原始“1900-01-01”[=14= 中纪元格式的日期]

读取数据

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

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

错误消息示例:

Error in as.Date.default(., date, origin = "1900-01-01") :do not know how to convert '.' to class “Date”

Error in as.POSIXct.default(., date, origin = "1900-01-01") :do not know how to convert '.' to class “POSIXct”

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 方法接受 类 "POSIXlt" 和 "POSIXct" 的字符串、因子、逻辑 NA 和对象。