read.xlsx读取date错误,如果在列中没有date

xlsx软件包错误地读取date。 我已经阅读了所有顶级的类似Q,并且在互联网上有了一名侦察员,但是如果列中存在非date数据,我不能在原点发生变化的情况下find这种特定的行为。

我有一个很小的Excel电子表格,你可以从Dropbox中获得:

https://www.dropbox.com/s/872q9mzb5uzukws/test.xlsx

它有三行,两列。 首先是一个date,第二个是一个数字。 第三行在date栏中有“总计”。

如果我用read.xlsx读取前两行,并告诉它第一列是date,那么这个工作:

 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 

这些确实是电子表格中的date。 如果我尝试阅读所有三行,出现了一些问题:

 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时代)。 如果我使用1970年的第二个地段,我得到了2084年的date。

所以:我做错了什么? 是整数阅读是最好的事情,如果有任何NAs然后转换使用Excel时代,否则使用Unix时代? 或者它是xlsx包中的一个错误?

xlsx版本是版本:0.5.1

XLConnect能够处理这个很漂亮的:

 test <- readWorksheetFromFile( "~/Downloads/test.xlsx", sheet = "Sheet1", header = FALSE ) test Col1 Col2 1 2014-06-29 00:00:00 49 2 2014-06-30 00:00:00 46 3 Grand Total 89251 

您所遇到的问题很明显,第一列是混合types: characterPOSIXctXLConnect能够正确读取每个单元格,但将一列中的所有单元格转换为最常见的types,在这种情况下为character

 str(test) 'data.frame': 3 obs. of 2 variables: $ Col1: chr "2014-06-29 00:00:00" "2014-06-30 00:00:00" "Grand Total" $ Col2: num 49 46 89251 

date可以读取为整数,然后使用convertToDate()函数转换为Date。

更多在这里