2017-04-05 230 views
10

我正在使用csv,但不幸使用42705的数字格式记录了日期时间,虽然它应该是01/12/2016。如何使用Lubridate将Excel日期格式转换为正确的日期

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

+2

[这](http://stackoverflow.com/questions/19172632/converting-excel-datetime-serial-number-to -r-datetime)可能会启动你。 – count

+0

谢谢你这么快回复。 – elksie5000

回答

15

对此,您不需要使用lubridate,基本功能as.Date可以很好地处理这种类型的转换。诀窍是,你必须提供原产地,这在Excel是12月30日1899年

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

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

+1

谢谢你。我对R仍然很陌生。它工作得很好。 – elksie5000

+0

非常欢迎。我现在正在编辑我的回复,因为我意识到原点稍微偏离了原点。给我一分钟,然后在你的项目中使用这段代码:-) –

+0

其实我只是在Excel中键入01/12/2016并将其转换为数字。我得到的值是42381,而不是42705.在'as.Date'函数中使用42381可以让您回到1/12/2016。你确定你是从Excel中正确复制的吗? –

0

这里是另一种方式来做到这一点使用看门人和tibble包:

install.packages("janitor") 

install.packages("tibble") 

library(tibble) 

library(janitor) 

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