我一直在使用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)。
但是,当我尝试使用带有日期和时间的第二个 Excel文件在单独的列中执行相同操作时,但格式与第一个Excel文件中的格式相同(日期列格式为&# 34;日期"和时间列格式化为"时间"),我得到不同的结果!对于第二个文件,Excel中的内容是,例如" 12/13/2014" (日期栏)和" 8:06:00 AM" (时间栏)导致" 41986"对于日期和" 0.3375000"在时间,这变成" 2084-12-14 08:06:00"在R中,我将这些列添加到一起!
发生了什么?考虑到人们几乎总是使用Excel为我提供R中的分析数据,什么是处理从Excel导入日期和时间的最佳方式?为什么这两个日期在Excel中保存后以不同的方式导入到R中会有什么不同?
答案 0 :(得分:0)
问题可能是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)错误地说它确实存在。