Usar R para descargar archivos de datos comprimidos, extraer e importar datos
@EZGraphs en Twitter escribe: "Muchos archivos CSV en línea están comprimidos. ¿Hay alguna forma de descargar, descomprimir el archivo y cargar los datos en un data.frame usando R? #Rstats".
También intenté hacer esto hoy, pero terminé descargando el archivo zip manualmente.
Intenté algo como:
fileName <- "http://www.newcl.org/data/zipfiles/a1.zip"
con1 <- unz(fileName, filename="a1.dat", open = "r")
pero siento que estoy muy lejos. ¿Alguna idea?
Los archivos Zip son en realidad más un "sistema de archivos" con metadatos de contenido, etc. Consulte help(unzip)
para obtener más detalles. Entonces, para hacer lo que esbozas arriba necesitas
- Crea una temperatura. nombre de archivo (p. ej.
tempfile()
) - Úselo
download.file()
para buscar el archivo en el archivo temporal. archivo - Úselo
unz()
para extraer el archivo de destino de temp. archivo - Elimine el archivo temporal mediante
unlink()
que en código (gracias por el ejemplo básico, pero esto es más simple) se ve así
temp <- tempfile()
download.file("http://www.newcl.org/data/zipfiles/a1.zip",temp)
data <- read.table(unz(temp, "a1.dat"))
unlink(temp)
Los archivos comprimidos ( .z
) o gzip ( .gz
) o bzip2ed ( .bz2
) son solo el archivo y aquellos que puede leer directamente desde una conexión. Así que haz que el proveedor de datos lo use en su lugar :)
Sólo para que conste, intenté traducir la respuesta de Dirk al código :-P
temp <- tempfile()
download.file("http://www.newcl.org/data/zipfiles/a1.zip",temp)
con <- unz(temp, "a1.dat")
data <- matrix(scan(con),ncol=4,byrow=TRUE)
unlink(temp)
Utilicé el "descargador" del paquete CRAN que se encuentra en http://cran.r-project.org/web/packages/downloader/index.html . Más fácil.
download(url, dest="dataset.zip", mode="wb")
unzip ("dataset.zip", exdir = "./")
Para Mac (y supongo que Linux)...
Si el archivo zip contiene un solo archivo, puede usar el comando bash funzip
, junto con el fread
del data.table
paquete:
library(data.table)
dt <- fread("curl http://www.newcl.org/data/zipfiles/a1.zip | funzip")
En los casos en que el archivo contenga varios archivos, puede utilizarlo tar
para extraer un archivo específico a la salida estándar:
dt <- fread("curl http://www.newcl.org/data/zipfiles/a1.zip | tar -xf- --to-stdout *a1.dat")