Das Paket xlsx
liest Daten falsch ein. Ich habe alle Top-ähnliche Q hier gelesen und hatte einen Scout rund um das Internet, aber ich kann dieses bestimmte Verhalten nicht finden, wo sich der Ursprung ändert, wenn in einer Spalte nicht-Datum Daten sind.
Ich habe eine kleine Excel-Tabelle, die Sie von Dropbox erhalten können:
Es hat drei Zeilen, zwei Spalten. Das erste ist ein Datum, das zweite ist eine Zahl. Die dritte Zeile hat "Grand Total" in der Datumsspalte.
Wenn ich die ersten beiden Zeilen mit read.xlsx
einlese und sage, dass die erste Spalte ein Datum ist, dann funktioniert das:
Das sind tatsächlich die Daten in der Tabelle. Wenn ich versuche, alle drei Zeilen zu lesen, geht etwas schief:
%Vor%Wenn ich versuche, als Ganzzahlen einzulesen, bekomme ich verschiedene Ganzzahlen:
%Vor% Die ersten ganzen Zahlen werden korrekt konvertiert mit as.Date(s1$X1,origin="1970-01-01")
(Unix-Epoche) und die zweiten ganzen Zahlen werden korrekt konvertiert mit as.Date(s2$X1, origin="1899-12-30")
(Excel-Epoche). Wenn ich das zweite Los um 1970 umwandle, bekomme ich die 2084 Daten.
Also: Mache ich etwas falsch? Ist die beste Sache, als ganze Zahlen zu lesen, und wenn irgendwelche NAs dann mit Excel-Epoche konvertieren, andernfalls Unix-Epoche verwenden? Oder ist es ein Fehler im Paket xlsx
?
xlsx-Version ist Version: 0.5.1
XLConnect
ist in der Lage, mit dieser hübschen Süßigkeit umzugehen:
Das Problem, das Sie haben, ist offensichtlich, dass die erste Spalte vom gemischten Typ ist: character
und POSIXct
. XLConnect
kann jede Zelle korrekt lesen, aber alle Zellen einer Spalte werden dann auf den gebräuchlichsten Typ geschrieben, der in diesem Fall character
ist.
Das Problem, das Sie haben, ist, dass Excel die Anzahl der Tage seit Jan-0-1900 speichert, und das ist die Nummer, die R aus der Excel-Datei liest. Wenn Sie in R konvertieren, konvertieren Sie basierend auf der Anzahl der Tage seit dem 1. Januar 1970. Wenn Sie die Anzahl der Tage zwischen diesen beiden zuerst abziehen, sollte es funktionieren.