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: character
和POSIXct
。 XLConnect
能够正确读取每个单元格,但将一列中的所有单元格转换为最常见的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。
更多在这里