@EZGraphs en Twitter escribe: "Muchos csvs en línea están comprimidos. ¿Hay alguna manera de descargar, descomprimir el archivo y cargar los datos en un data.frame usando R? #Rstats"
También estaba tratando de 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?
r
zip
connection
Jeromy Anglim
fuente
fuente
Respuestas:
Los archivos zip son en realidad más un 'sistema de archivos' con metadatos de contenido, etc. Consulte
help(unzip)
para más detalles. Entonces, para hacer lo que bosquejas arriba necesitastempfile()
)download.file()
para buscar el archivo en la temperatura. expedienteunz()
para extraer el archivo de destino de temp. expedienteunlink()
que en el código (gracias por el ejemplo básico, pero esto es más simple) parece
Los archivos comprimidos (
.z
) o gzipped (.gz
) o bzip2ed (.bz2
) son solo el archivo y los que puede leer directamente desde una conexión. Así que haga que el proveedor de datos lo use en su lugar :)fuente
.z
archivo? Puedo leer desde una conexión URL conreadBin(url(x, "rb"), 'raw', 99999999)
, pero ¿cómo extraería los datos contenidos? Eluncompress
paquete se ha eliminado de CRAN. ¿Es esto posible en la base R (y si es así, ¿está restringido a los sistemas * nix?)? Feliz de publicar como una nueva pregunta, si corresponde.help(gzfile)
, estaba pensando que el protocolo gzip ahora también puede descomprimir (viejos) archivos .z ahora que la patente ha expirado hace mucho tiempo. Puede que no. ¿Quién usa .z de todos modos? Los años 80 llamaron, quieren recuperar su compresión ;-)readRDS()
(al menos para mí). Por lo que puedo decir, el archivo debe estar en un tipo de archivo con el que pueda leerread.table()
.Solo para que conste, intenté traducir la respuesta de Dirk al código :-P
fuente
scan()
; puede usarread.table()
et al directamente en una conexión. Vea mi respuesta editada,Utilicé el "descargador" del paquete CRAN que se encuentra en http://cran.r-project.org/web/packages/downloader/index.html . Más fácil.
fuente
Para Mac (y supongo que Linux) ...
Si el archivo zip contiene un solo archivo, puede usar el comando bash
funzip
, junto confread
el deldata.table
paquete:En los casos en que el archivo contiene varios archivos, puede usar
tar
en su lugar para extraer un archivo específico para stdout:fuente
File is empty:
Aquí hay un ejemplo que funciona para archivos que no se pueden leer con la
read.table
función. Este ejemplo lee un archivo .xls.fuente
Para hacer esto usando data.table, descubrí que lo siguiente funciona. Desafortunadamente, el enlace ya no funciona, así que usé un enlace para otro conjunto de datos.
Sé que esto es posible en una sola línea, ya que puede pasar scripts de bash a
fread
, pero no estoy seguro de cómo descargar un archivo .zip, extraer y pasar un solo archivo desde allífread
.fuente
Prueba este código. Esto funciona para mi:
Ejemplo:
fuente