A @EZGraphs no Twitter escreve: "Muitos csvs online são compactados. Existe uma maneira de baixar, descompactar o arquivo morto e carregar os dados em um data.frame usando R? #Rstats"
Eu também estava tentando fazer isso hoje, mas acabei baixando o arquivo zip manualmente.
Eu tentei algo como:
fileName <- "http://www.newcl.org/data/zipfiles/a1.zip"
con1 <- unz(fileName, filename="a1.dat", open = "r")
mas sinto como se estivesse longe. Alguma ideia?
r
zip
connection
Jeromy Anglim
fonte
fonte
Respostas:
Na verdade, os arquivos zip são mais um 'sistema de arquivos' com metadados de conteúdo, etc. Veja
help(unzip)
para detalhes. Então, para fazer o que você esboçou acima, você precisatempfile()
)download.file()
para buscar o arquivo na temperatura Arquivounz()
para extrair o arquivo de destino de temp. Arquivounlink()
que no código (obrigado pelo exemplo básico, mas isso é mais simples) parece
Compactados (
.z
) ou gzipped (.gz
) ou bzip2ed (.bz2
arquivos) são apenas o arquivo e aqueles que você pode ler diretamente a partir de uma conexão. Portanto, faça com que o provedor de dados use isso em vez disso :)fonte
.z
arquivo? Posso ler a partir de uma conexão de URLreadBin(url(x, "rb"), 'raw', 99999999)
, mas como extrair os dados contidos? Ouncompress
pacote foi removido do CRAN - isso é possível na base R (e, nesse caso, é restrito aos sistemas * nix?)? É um prazer postar como uma nova pergunta, se apropriado.help(gzfile)
- eu estava pensando que o protocolo gzip agora pode descompactar arquivos .z (agora antigos) também agora que a patente expirou. Não pode. Quem usa .z de qualquer maneira? A década de 1980 chamadas, eles querem a sua volta compressão ;-)readRDS()
(pelo menos para mim). Pelo que sei, o arquivo precisa estar em um tipo de arquivo com o qual você possa lerread.table()
.Só para constar, tentei traduzir a resposta de Dirk no código :-P
fonte
scan()
; você pode usarread.table()
et al diretamente em uma conexão. Veja minha resposta editada,Eu usei o pacote CRAN "downloader" encontrado em http://cran.r-project.org/web/packages/downloader/index.html . Muito facil.
fonte
Para Mac (e eu assumo Linux) ...
Se o arquivo zip contiver um único arquivo, você poderá usar o comando bash
funzip
, em conjunto comfread
odata.table
pacote:Nos casos em que o archive contém vários arquivos, você pode usar
tar
para extrair um arquivo específico para o stdout:fonte
File is empty:
Aqui está um exemplo que funciona para arquivos que não podem ser lidos com a
read.table
função Este exemplo lê um arquivo .xls.fonte
Para fazer isso usando data.table, descobri que o seguinte funciona. Infelizmente, o link não funciona mais, então usei um link para outro conjunto de dados.
Eu sei que isso é possível em uma única linha, pois você pode passar scripts bash para
fread
, mas não sei como baixar um arquivo .zip, extrair e passar um único arquivo disso parafread
.fonte
Experimente este código. Funciona para mim:
Exemplo:
fonte