@EZGraphs di Twitter menulis: "Banyak csv online yang di-zip. Adakah cara untuk mendownload, mengekstrak arsip, dan memuat data ke data.frame menggunakan R? #Rstats"
Saya juga mencoba melakukan ini hari ini, tetapi akhirnya hanya mengunduh file zip secara manual.
Saya mencoba sesuatu seperti:
fileName <- "http://www.newcl.org/data/zipfiles/a1.zip"
con1 <- unz(fileName, filename="a1.dat", open = "r")
tapi aku merasa seolah-olah aku masih jauh. Ada pemikiran?
r
zip
connection
Jeromy Anglim
sumber
sumber
Jawaban:
Arsip zip sebenarnya lebih merupakan 'filesystem' dengan metadata konten, dll. Lihat
help(unzip)
untuk detailnya. Jadi untuk melakukan apa yang Anda buat sketsa di atas, Anda perlu melakukannyatempfile()
)download.file()
untuk mengambil file ke dalam temp. mengajukanunz()
untuk mengekstrak file target dari temp. mengajukanunlink()
yang dalam kode (terima kasih untuk contoh dasar, tetapi ini lebih sederhana) terlihat
File terkompresi (
.z
) atau gzip (.gz
) atau bzip2ed (.bz2
) hanyalah file dan yang dapat Anda baca langsung dari sambungan. Jadi minta penyedia data untuk menggunakannya :)sumber
.z
arsip? Saya dapat membaca dari koneksi url denganreadBin(url(x, "rb"), 'raw', 99999999)
, tetapi bagaimana cara mengekstrak data yang ada di dalamnya? Theuncompress
paket telah dihapus dari CRAN - apakah ini mungkin dalam basis R (dan jika demikian, apakah terbatas pada sistem nix *?)? Senang memposting sebagai pertanyaan baru jika sesuai.help(gzfile)
- Saya berpikir bahwa protokol gzip sekarang dapat membuka kompresi (batu tua) file .z juga sekarang karena patennya telah lama kedaluwarsa. Mungkin tidak. Siapa yang menggunakan .z? Tahun 1980-an disebut, mereka ingin kompresi mereka kembali ;-)readRDS()
(setidaknya untuk saya). Dari apa yang saya tahu, file tersebut harus dalam jenis file yang dapat Anda bacaread.table()
.Sekadar catatan, saya mencoba menerjemahkan jawaban Dirk ke dalam kode :-P
sumber
scan()
; Anda dapat menggunakanread.table()
dkk secara langsung pada koneksi. Lihat jawaban saya yang diedit,Saya menggunakan paket CRAN "downloader" yang ada di http://cran.r-project.org/web/packages/downloader/index.html . Jauh lebih mudah.
sumber
Untuk Mac (dan saya menganggap Linux) ...
Jika arsip zip berisi satu file, Anda dapat menggunakan perintah bash
funzip
, bersama denganfread
daridata.table
paket:Jika arsip berisi banyak file, Anda dapat menggunakan
tar
untuk mengekstrak file tertentu ke stdout:sumber
File is empty:
Berikut adalah contoh yang berfungsi untuk file yang tidak dapat dibaca dengan
read.table
fungsi tersebut. Contoh ini membaca file .xls.sumber
Untuk melakukan ini menggunakan data.table, saya menemukan bahwa yang berikut berfungsi. Sayangnya, tautan tersebut tidak berfungsi lagi, jadi saya menggunakan tautan untuk kumpulan data lain.
Saya tahu ini dimungkinkan dalam satu baris karena Anda dapat mengirimkan skrip bash ke
fread
, tetapi saya tidak yakin bagaimana cara mengunduh file .zip, mengekstrak, dan meneruskan satu file dari itu kefread
.sumber
Coba kode ini. Ini bekerja untuk saya:
Contoh:
sumber