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 和对象。
使用 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 和对象。