17

xlsxパッケージが間違って日付を読み取っています。ここで同様の上位の Q をすべて読み、インターネットでスカウトを行いましたが、列に日付以外のデータがある場合に元が変更されるこの特定の動作を見つけることができません。

Dropbox から取得できる小さな Excel スプレッドシートがあります。

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

3 行 2 列です。1 つ目は日付、2 つ目は数字です。3 行目の日付列には「総計」があります。

最初の 2 行を読み取り、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

これらは確かにスプレッドシートの日付です。3 行すべてを読み取ろうとすると、何か問題が発生します。

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 エポック) を使用して正しく変換され、2 番目の整数はas.Date(s2$X1, origin="1899-12-30")(Excel エポック) を使用して正しく変換されます。1970 を使用して 2 番目のロットを変換すると、2084 の日付が得られます。

だから:私は何か間違ったことをしていますか?整数として読み取るのが最善であり、NA がある場合は Excel エポックを使用して変換し、それ以外の場合は Unix エポックを使用しますか? それともxlsxパッケージのバグですか?

xlsx バージョンはバージョン: 0.5.1

4

3 に答える 3