【问题标题】:Inconsistent date/time format when importing to R from Excel从 Excel 导入 R 时日期/时间格式不一致
【发布时间】:2016-08-17 03:36:21
【问题描述】:

我一直在处理一个 Excel 文件,其中一列中包含日期,第二列中包含一天中的时间。在 Excel 中,日期列的格式为“日期”,时间列的格式为“时间”。在尝试了无数种将这些数据从 Excel 导入 R 的方法之后,我终于找到了一种方法来获取我想要的数据——日期和时间的 R data.frame 中的一列一起作为 POSIXct 类。首先,当使用 xlsx 包中的read.xlsx2 读取数据时,我将两列的colClasses 设置为"numeric"。这给了我,例如,日期为“16417”,时间为“0.3375000”。

其次,我通过这样做将它们合并为一列:

 as.POSIXct(as.Date(Data1$Date + Data1$Time,
                                  origin = "1970-01-01"), 
                          "%Y-%m-%d %H:%M:%S") + 60*60*8

这给了我正确的日期和时间 (2014-12-13 08:06:00)。

但是,当我尝试对 second Excel 文件执行相同操作时,该文件的日期和时间位于单独的列中,但格式与第一个 Excel 文件中的格式相同(日期列格式为“日期”和时间列格式为“时间”),我得到不同的结果!对于第二个文件,Excel 中的内容,例如“12/13/2014”(日期列)和“8:06:00 AM”(时间列)导致日期为“41986”,而“0.3375000”为时间,一旦我将这些列添加在一起,它就会在 R 中变为“2084-12-14 08:06:00”!

发生了什么事?考虑到人们几乎总是使用 Excel 向我提供数据以在 R 中进行分析,处理将日期和时间从 Excel 一致地导入 R 的最佳方法是什么?为什么保存在 R 中的两个日期不同Excel然后用同样的方法导入R?

【问题讨论】:

  • 如果你的日期栏是12/13/2014,那么as.Date的格式应该是%m/%d/%Y
  • 阅读r-project.org/doc/Rnews/Rnews_2004-1.pdf中的帮助台文章
  • 其实我是导入为“数字”的,所以是41986。这是让我感到困惑的事情之一,因为在另一个文件中,导入与数字相同的日期会给我16417
  • @G.Grothendieck:我做到了。这并没有解决这个问题。

标签: r excel date time


【解决方案1】:

问题可能是 Excel(在 Windows 上)使用 1900 年 1 月 1 日作为 Origin 而不是 UNIX 的 1970 年 1 月 1 日。这将解释 70 年的差异。

as.POSIXct(as.Date(Data1$Date + Data1$Time, origin = "1900-01-01")

仅供参考:在 MacOx 上,原点是 1904 年 1 月 1 日。1900 年也没有闰日,但 Excel(Windows) 错误地说有。

【讨论】:

  • 是的,为了解决这个问题,我在转换第二个文件的日期时将原点设置为“1899-12-30”,但为什么有必要这样做?如何预测何时需要使用 Windows 或 Unix 开始日期?
  • 不看原始文件很难说。原始数据在一种情况下可以保存为日期字段,在另一种情况下可以保存为文本。
  • @LauraS 如果 Excel 中的日期存储为“真正的 Excel 日期”,则基准日期绝不应该是 UNIX 开始日期。您需要仔细检查显示此问题的 excel 文件以确定问题。
  • @RonRosenfeld:谢谢。我正在仔细检查。我还没有破译这个问题,但是是的,我相信它是 Excel 的问题。
  • @LauraS 如果您想上传显示问题的文件(删除机密信息),并在此处发布链接,我可以看一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
相关资源
最近更新 更多