使用Excel在`as.POSIXct`中的数据差异

Kav*_*iya 7 excel time datetime r

我的实际数据看起来像

8/8/2013 15:10
7/26/2013 10:30
7/11/2013 14:20
3/28/2013 16:15
3/18/2013 15:50
Run Code Online (Sandbox Code Playgroud)

当我从excel文件中读取时,R读为,

41494.63
41481.44
41466.60
41361.68
41351.66
Run Code Online (Sandbox Code Playgroud)

所以我用了,as.POSIXct(as.numeric(x[1:5])*86400, origin="1899-12-30",tz="GMT")我得到了,

2013-08-08 15:07:12 GMT
2013-07-26 10:33:36 GMT
2013-07-11 14:24:00 GMT
2013-03-28 16:19:12 GMT
2013-03-18 15:50:24 GMT
Run Code Online (Sandbox Code Playgroud)

为什么时间有差异?如何克服它?

Jaa*_*aap 7

问题是Excel的R或者将数字四舍五入为小数点后两位.当您将单元格转换为8/8/2013 15:10文本格式(在Mac OSX上的Excel中)时,您将获得该数字41494.63194.

当你使用:

as.POSIXct(41494.63194*86400, origin="1899-12-30",tz="GMT")
Run Code Online (Sandbox Code Playgroud)

它会给你:

[1] "2013-08-08 15:09:59 GMT"
Run Code Online (Sandbox Code Playgroud)

这比原始日期减少了1秒(这也是一个41494.63194四舍五入到五位小数的指示).

可能最好的解决方案是将excel文件导出到一个.csv或以制表符分隔的.txt文件,然后将其读入R.这至少给出了正确的日期:

> df
            datum
1  8/8/2013 15:10
2 7/26/2013 10:30
3 7/11/2013 14:20
4 3/28/2013 16:15
5 3/18/2013 15:50
Run Code Online (Sandbox Code Playgroud)