xlsx
包裹正在错误地读取日期。我在这里阅读了所有最相似的 Q 并在互联网上进行了侦察,但如果列中存在非日期数据,我无法找到原点发生变化的这种特殊行为。
我有一个很小的 Excel 电子表格,您可以从 Dropbox 获取:
https://www.dropbox.com/s/872q9mzb5uzukws/test.xlsx
它有三行,两列。第一个是日期,第二个是数字。第三行在日期列中有“总计”。
如果我在前两行中读取read.xlsx
并告诉它第一列是日期,那么这是有效的:
read.xlsx("./test.xlsx",head=FALSE,1,colClasses=c("Date","integer"),endRow=2)
X1 X2
1 2014-06-29 49
2 2014-06-30 46
这些确实是电子表格中的日期。如果我尝试阅读所有三行,则会出现问题:
read.xlsx("./test.xlsx",head=FALSE,1,colClasses=c("Date","integer"))
X1 X2
1 2084-06-30 49
2 2084-07-01 46
3 <NA> 89251
Warning message:
In as.POSIXlt.Date(x) : NAs introduced by coercion
如果我尝试以整数形式读入,我会得到不同的整数:
> read.xlsx("./test.xlsx",head=FALSE,1,colClasses=c("integer","integer"),endRow=2)
X1 X2
1 16250 49
2 16251 46
> read.xlsx("./test.xlsx",head=FALSE,1,colClasses=c("integer","integer"))
X1 X2
1 41819 49
2 41820 46
3 NA 89251
第一个整数使用as.Date(s1$X1,origin="1970-01-01")
(Unix epoch) 正确转换,第二个整数使用as.Date(s2$X1, origin="1899-12-30")
(Excel epoch) 正确转换。如果我使用 1970 年转换第二批,我会得到 2084 年的日期。
所以:我做错了吗?以整数形式读取是最好的选择,如果有任何 NA,则使用 Excel 纪元进行转换,否则使用 Unix 纪元?或者它是xlsx
包中的一个错误?
xlsx 版本是版本:0.5.1