【发布时间】:2017-08-31 00:36:45
【问题描述】:
我正在使用一个 csv,它不幸地使用 42705 的数字格式记录了日期时间,尽管它应该是 01/12/2016。
我想使用 lubridate 或其他一些包将其转换为 R 中的正确格式。有没有处理它的函数?
【问题讨论】:
-
This 可能会设置你。
-
感谢您这么快的回复。
我正在使用一个 csv,它不幸地使用 42705 的数字格式记录了日期时间,尽管它应该是 01/12/2016。
我想使用 lubridate 或其他一些包将其转换为 R 中的正确格式。有没有处理它的函数?
【问题讨论】:
正如人们所说,非常好的选择:
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")
【讨论】:
openxlsx 包还允许xls date 转换:
openxlsx::convertToDate(42705)
[1] "2016-12-01"
正如@Suren 所建议的,convertToDateTime 对于datetime 转换很有用:
openxlsx::convertToDateTime(42705.5)
[1] "2016-12-01 12:00:00"
【讨论】:
convertToDateTime 如果是日期时间。
这是使用 janitor 和 tibble 包的另一种方法:
install.packages("janitor")
install.packages("tibble")
library(tibble)
library(janitor)
excel_numeric_to_date(as.numeric(as.character(YourDate)), date_system = "modern")
【讨论】:
您不需要为此使用lubridate,基本函数as.Date 可以很好地处理这种类型的转换。诀窍是您必须提供原点,在 Excel 中是 1899 年 12 月 30 日。
as.Date(42705, origin = "1899-12-30")
# [1] "2016-12-01"
如果您想保留列类型,可以尝试使用 readxl 包中的 read_excel 函数。这使您可以加载保留数字格式的 XLS 或 XLSX 文件。
【讨论】:
as.Date 函数中使用 42381 可以让您回到 2016 年 1 月 12 日。您确定您从 Excel 中正确复制了数字吗?
as_datetime(Date,origin = "1969-12-31 24:00:00")