如何将 Excel 日期格式转换为 R 中的正确日期

How to convert Excel date format to proper date in R

我正在使用一个 csv,不幸的是它使用 42705 的数字格式记录了日期时间,尽管它应该是 01/12/2016。

我想使用 lubridate 或其他一些包将其转换为 R 中的正确格式。有没有函数可以处理它?

您不需要为此使用 lubridate,基本函数 as.Date 可以很好地处理这种类型的转换。诀窍是您必须提供来源,在 Excel 中是 1899 年 12 月 30 日。

as.Date(42705, origin = "1899-12-30")
# [1] "2016-12-01"

如果您想保留您的列类型,您可以尝试使用 readxl 包中的 read_excel 函数。这使您可以加载保留数字格式的 XLS 或 XLSX 文件。

这是使用 janitor 和 tibble 包的另一种方法:

install.packages("janitor")
install.packages("tibble")

library(tibble)
library(janitor)

excel_numeric_to_date(as.numeric(as.character(YourDate)), date_system = "modern")    

openxlsx 包还允许 xls date 转换:

openxlsx::convertToDate(42705)
[1] "2016-12-01"

正如@Suren 所建议的,convertToDateTime 允许 datetime 转换:

openxlsx::convertToDateTime(42705.5)
[1] "2016-12-01 12:00:00"

正如所说,非常好的选择:

as.Date(42705, origin = "1899-12-30")

openxlsx::convertToDate(42705)

另一种方式也可以是:

format(as.Date(as.Date("1899-12-30") + 42705, "%d-%m-%Y"), "%d-%m-%Y")

请注意,您可以在写入的地方更改输出格式%d-%m-%Y

(如果是字符导入,首先要转换as.numeric!,或者在公式中转换:

format(as.Date(as.Date("1899-12-30") + as.numeric( number formatted as character), "%d-%m-%Y"), "%d-%m-%Y")

如果您使用 data.table 包,您可以使用 as.IDate()

require(data.table)

as.IDate(42705, origin = "1899-12-30")
# [1] "2016-12-01"

这里的工作方式类似于 base::as.Date()