我正在使用csv,不幸的是,它使用42705的数字格式记录了日期时间,尽管它应该是2016年12月1日。
我想使用Lubridate或其他软件包将其转换为R中的正确格式。是否有能够处理它的功能?
答案 0 :(得分:46)
您不需要使用lubridate
,基本函数as.Date
可以很好地处理这种类型的转换。诀窍是你必须提供原点,在Excel中是1899年12月30日。
as.Date(42705, origin = "1899-12-30")
# [1] "2016-12-01"
如果要保留列类型,可以尝试使用read_excel
包中的readxl
函数。这使您可以加载保留数字格式的XLS或XLSX文件。
答案 1 :(得分:7)
以下是使用janitor和tibble包的另一种方法:
install.packages("janitor")
install.packages("tibble")
library(tibble)
library(janitor)
excel_numeric_to_date(as.numeric(as.character(YourDate)), date_system = "modern")
答案 2 :(得分:7)
openxlsx
软件包还允许xls日期转换:
openxlsx::convertToDate(42705)
[1] "2016-12-01"
答案 3 :(得分:0)
正如人们所说,非常好的选择:
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")