如何将 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()
。
我正在使用一个 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()
。