Using R to download zipped data file, extract, and import data

connection, r, r-faq, zip

Solution

Zip archives are actually more a 'filesystem' with content metadata etc. See `help(unzip)` for details. So to do what you sketch out above you need to

- Create a temp. file name (eg `tempfile()`)

- Use `download.file()` to fetch the file into the temp. file

- Use `unz()` to extract the target file from temp. file

- Remove the temp file via `unlink()`

which in code (thanks for basic example, but this is simpler) looks like

temp <- tempfile()
download.file("http://www.newcl.org/data/zipfiles/a1.zip",temp)
data <- read.table(unz(temp, "a1.dat"))
unlink(temp)

Compressed (`.z`) or gzipped (`.gz`) or bzip2ed (`.bz2`) files are just the file and those you can read directly from a connection. So get the data provider to use that instead :)

Problem

@EZGraphs on Twitter writes: "Lots of online csvs are zipped. Is there a way to download, unzip the archive, and load the data to a data.frame using R? #Rstats" I was also trying to do this today, but ended up just downloading the zip file manually. I tried something like: ``` fileName <- "http://www.newcl.org/data/zipfiles/a1.zip" con1 <- unz(fileName, filename="a1.dat", open = "r") ``` but I feel as if I'm a long way off. Any thoughts?

Original source