@EZGraphs auf Twitter schreibt: "Viele Online-CSVs werden komprimiert. Gibt es eine Möglichkeit, das Archiv mit R? #Rstats herunterzuladen, zu entpacken und die Daten in einen data.frame zu laden?"
Ich habe heute auch versucht, dies zu tun, aber am Ende habe ich die Zip-Datei nur manuell heruntergeladen.
Ich habe so etwas versucht wie:
fileName <- "http://www.newcl.org/data/zipfiles/a1.zip"
con1 <- unz(fileName, filename="a1.dat", open = "r")
aber ich fühle mich, als wäre ich weit weg. Irgendwelche Gedanken?
r
zip
connection
Jeromy Anglim
quelle
quelle
Antworten:
Zip-Archive sind eigentlich eher ein "Dateisystem" mit Inhaltsmetadaten usw. Siehe
help(unzip)
für Details. Um das zu tun, was Sie oben skizzieren, müssen Sietempfile()
)download.file()
diese Option, um die Datei in die temporäre Datei abzurufen. Dateiunz()
diese Option, um die Zieldatei aus temp zu extrahieren. Dateiunlink()
was im Code aussieht (danke für das einfache Beispiel, aber das ist einfacher)
Komprimierte (
.z
) oder gzipped (.gz
) oder bzip2ed (.bz2
) Dateien sind nur die Dateien und diejenigen, die Sie direkt von einer Verbindung lesen können. Lassen Sie den Datenanbieter das stattdessen verwenden :)quelle
.z
Archiv zu erweitern? Ich kann aus einer URL-Verbindung mit lesenreadBin(url(x, "rb"), 'raw', 99999999)
, aber wie würde ich die enthaltenen Daten extrahieren? Dasuncompress
Paket wurde aus CRAN entfernt - ist dies in Base R möglich (und wenn ja, ist es auf * nix-Systeme beschränkt?)? Gerne als neue Frage gegebenenfalls posten.help(gzfile)
- Ich dachte, dass das gzip-Protokoll jetzt, da das Patent längst abgelaufen ist, möglicherweise auch (Stein alte) .z-Dateien dekomprimiert. Es darf nicht. Wer benutzt überhaupt .z? Die 1980er riefen an, sie wollen ihre Kompression zurück ;-)readRDS()
(zumindest für mich). Soweit ich das beurteilen kann, muss sich die Datei in einer Art Datei befinden, mit der Sie lesen könnenread.table()
.Nur zur Veranschaulichung, ich habe versucht, Dirks Antwort in Code zu übersetzen :-P
quelle
scan()
; Sie könnenread.table()
et al direkt auf einer Verbindung verwenden. Siehe meine bearbeitete Antwort,Ich habe das CRAN-Paket "downloader" verwendet, das unter http://cran.r-project.org/web/packages/downloader/index.html zu finden ist . Viel einfacher.
quelle
Für Mac (und ich nehme Linux an) ...
Wenn das Zip-Archiv eine einzelne Datei enthält, können Sie den Befehl bash
funzip
in Verbindung mitfread
demdata.table
Paket verwenden:In Fällen, in denen das Archiv mehrere Dateien enthält, können Sie
tar
stattdessen eine bestimmte Datei in stdout extrahieren:quelle
File is empty:
Hier ist ein Beispiel, das für Dateien
read.table
funktioniert, die mit der Funktion nicht eingelesen werden können. In diesem Beispiel wird eine XLS-Datei gelesen.quelle
Um dies mit data.table zu tun, stellte ich fest, dass das Folgende funktioniert. Leider funktioniert der Link nicht mehr, daher habe ich einen Link für einen anderen Datensatz verwendet.
Ich weiß, dass dies in einer einzigen Zeile möglich ist, da Sie Bash-Skripte an übergeben können
fread
, aber ich bin nicht sicher, wie ich eine ZIP-Datei herunterladen, extrahieren und eine einzelne Datei von dieser an übergeben sollfread
.quelle
Versuchen Sie diesen Code. Für mich geht das:
Beispiel:
quelle