【问题标题】:How to convert Excel date format to proper date in R如何将Excel日期格式转换为R中的正确日期
【发布时间】:2017-08-31 00:36:45
【问题描述】:

我正在使用一个 csv,它不幸地使用 42705 的数字格式记录了日期时间,尽管它应该是 01/12/2016。

我想使用 lubridate 或其他一些包将其转换为 R 中的正确格式。有没有处理它的函数?

【问题讨论】:

  • This 可能会设置你。
  • 感谢您这么快的回复。

标签: r date datetime lubridate


【解决方案1】:

正如人们所说,非常好的选择:

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")

【讨论】:

    【解决方案2】:

    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 如果是日期时间。
    【解决方案3】:

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

    install.packages("janitor")
    install.packages("tibble")
    
    library(tibble)
    library(janitor)
    
    excel_numeric_to_date(as.numeric(as.character(YourDate)), date_system = "modern")    
    

    【讨论】:

    • convert_to_date() - 也来自 janitor 包 - 可以在 Excel 数字日期和实际日期混合使用时使用
    【解决方案4】:

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

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

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

    【讨论】:

    • 谢谢你。我对 R 还是很陌生。它很有效。
    • 非常欢迎。我现在正在编辑我的回复,因为我意识到原点有点偏离。在您在项目中使用此代码之前给我一分钟 :-)
    • 其实我只是在 Excel 中输入 01/12/2016 并将其转换为数字。我得到的值是 42381,而不是 42705。在 as.Date 函数中使用 42381 可以让您回到 2016 年 1 月 12 日。您确定您从 Excel 中正确复制了数字吗?
    • 在法语版的 excel 中,最好的解决方案是相当吸引人的,对于一个有几个小时的约会:as_datetime(Date,origin = "1969-12-31 24:00:00")
    • 对于那些想知道 1899-12-30 来自哪里以及它是否正确的人,微软似乎在某些 Excel 版本中使用 1900 作为参考日期,在某些版本中使用 1904!出于这个原因,我建议您也从其他来源确认日期。来源:support.microsoft.com/en-us/office/…
    猜你喜欢
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    相关资源
    最近更新 更多