我有两个excel(xlsx)文件,其中包含格式为h:mm:ss.000的时间数据。据我所知,文件格式是相同的,但导入R后我得到的值不同。
使用gdata::read.xls()
,时间列作为因素导入;但是对于某些文件,它的格式为hh:mm:ss.000,而在其他文件中,它只是数字(我认为是epoch,除非我尝试使用as.POSIXct()
转换,我得到的时间是关闭的10分钟 - 可能是舍入错误?我正在使用as.numeric(as.character(x))
转换因子。)
我已经用Google搜索,无法找到可能导致此问题的原因。 excel列格式完全相同。
我在这里分享了这些文件:http://www.filedropper.com/badexcel
ff3正在按我的意愿进入(h:mm:ss.000),而ff10以数字形式读入(尽管两者都是因素)。
代码:
require(gdata)
require(dplyr)
ff3 <- read.xls("ff3.xlsx", sheet = 2)
ff10 <- read.xls("ff10.xlsx", sheet = 2)
ff3 <- select(ff3, Code:Timestamp)
ff3<- filter(ff3, Timestamp!="[...]")
ff10 <- select(ff10, Code:Timestamp)
ff10 <- filter(ff10, Timestamp!="[...]")
head(ff3$Timestamp)
head(ff10$Timestamp)
as.POSIXct(as.numeric(as.character(devdata$Timestamp)), origin = "1970-01-01", tz="MST")
结果:
头(FF3 $时间戳)
[1] 17:02:40.160 17:03:00.420 17:03:52.980 17:04:00.760 17:04:10.850 17:04:14.270 12级:[...] 17:02:40.160 17:03:00.420 17:03:52.980 17:04:00.760 ... 17:07:13.350
头(FF10 $时间戳)
[1] 42097.360296296298000 42097.360625347224000 42097.361245254629000 42097.361760763888000 [5] 42097.362458912037000 42097.362762384262000 15级:[...] 42097.360296296298000 42097.360625347224000 ... 42097.364464467595000
as.POSIXct(as.numeric(as.character(devdata $ Timestamp)),origin =“1970-01-01”,tz =“MST”)
[1]“1970-01-01 04:41:37 MST”“1970-01-01 04:41:37 MST”“1970-01-01 04:41:37 MST” [4]“1970-01-01 04:41:37 MST”“1970-01-01 04:41:37 MST”“1970-01-01 04:41:37 MST” [7]“1970-01-01 04:41:37 MST”“1970-01-01 04:41:37 MST”“1970-01-01 04:41:37 MST” [10]“1970-01-01 04:41:37 MST”“1970-01-01 04:41:37 MST”“1970-01-01 04:41:37 MST” [13]“1970-01-01 04:41:37 MST”“1970-01-01 04:41:37 MST”
问题:为什么导入结果不同,我如何确保它们是相同的 要么 使用as.POSIXct()的数值没有正确转换有什么问题?
修改 我已经尝试了Joran建议的其他xls阅读包,并得到了相同的结果,暗示它是关于xlsx文件的东西。我尝试将它们保存为CSV并且时间格式相同(hh:mm:ss.000)。任何excel专家都知道可能导致这种情况的原因是什么?
对于任何试图打开它们的人来说,循环引用是有意的(我允许单次迭代),但没有必要启用循环引用来查看数据。