如何使用Lubridate将Excel日期格式转换为正确的日期

elk*_*000 35 r lubridate

我正在使用csv,不幸的是,它使用42705的数字格式记录了日期时间,尽管它应该是2016年12月1日.

我想使用Lubridate或其他软件包将其转换为R中的正确格式.有没有能够处理它的功能?

And*_*ēza 64

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

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

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

  • 对于那些想知道 1899-12-30 从何而来以及它是否正确的人来说,微软似乎在某些 Excel 版本中使用 1900 作为参考日期,而在某些版本中则使用 1904!因此,我建议您也从其他来源确认日期。来源:https://support.microsoft.com/en-us/office/date-systems-in-excel-e7fe7167-48a9-4b96-bb53-5612a800b487 (6认同)
  • 谢谢你。我对 R 还很陌生。它很有效。 (4认同)
  • 在法语版本的 Excel 中,对于有小时的日期,最佳解决方案非常令人着迷:`as_datetime(Date,origin = "1969-12-31 24:00:00")` (2认同)

小智 15

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

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

library(tibble)
library(janitor)

excel_numeric_to_date(as.numeric(as.character(YourDate)), date_system = "modern")    
Run Code Online (Sandbox Code Playgroud)

  • Convert_to_date() - 也来自 janitor 包 - 可以在 Excel 数字日期和实际日期混合时使用 (4认同)

Wal*_*ldi 12

openxlsx包还允许xls date转换:

openxlsx::convertToDate(42705)
[1] "2016-12-01"
Run Code Online (Sandbox Code Playgroud)

正如@Suren 所建议的,convertToDateTime对于datetime转换很有用:

openxlsx::convertToDateTime(42705.5)
[1] "2016-12-01 12:00:00"
Run Code Online (Sandbox Code Playgroud)

  • 如果是日期时间,则为“convertToDateTime”。 (5认同)