@EZGraphs sur Twitter écrit: "De nombreux csv en ligne sont compressés. Y a-t-il un moyen de télécharger, décompresser l'archive et charger les données dans un data.frame en utilisant R? #Rstats"
J'essayais également de le faire aujourd'hui, mais j'ai fini par télécharger le fichier zip manuellement.
J'ai essayé quelque chose comme:
fileName <- "http://www.newcl.org/data/zipfiles/a1.zip"
con1 <- unz(fileName, filename="a1.dat", open = "r")
mais j'ai l'impression d'être loin. Des pensées?
r
zip
connection
Jeromy Anglim
la source
la source
Réponses:
Les archives Zip sont en fait plus un «système de fichiers» avec des métadonnées de contenu, etc. Voir
help(unzip)
pour plus de détails. Donc, pour faire ce que vous esquissez ci-dessus, vous deveztempfile()
)download.file()
pour récupérer le fichier dans le fichier temp. fichierunz()
pour extraire le fichier cible de temp. fichierunlink()
qui dans le code (merci pour l'exemple de base, mais c'est plus simple) ressemble à
Les fichiers compressés (
.z
) ou gzippés (.gz
) ou bzip2ed (.bz2
) ne sont que le fichier et ceux que vous pouvez lire directement à partir d'une connexion. Alors demandez au fournisseur de données de l'utiliser à la place :)la source
.z
archive? Je peux lire à partir d'une connexion URL avecreadBin(url(x, "rb"), 'raw', 99999999)
, mais comment extraire les données contenues? Leuncompress
paquet a été supprimé de CRAN - est-ce possible dans la base R (et si oui, est-il limité aux systèmes * nix?)? Heureux de publier une nouvelle question le cas échéant.help(gzfile)
- Je pensais que le protocole gzip peut maintenant décompresser les fichiers .z (vieux de pierre) aussi maintenant que le brevet a expiré depuis longtemps. Ce n'est peut-être pas le cas. Qui utilise .z de toute façon? Les années 1980 ont appelé, ils veulent leur compression ;-)readRDS()
(du moins pour moi). D'après ce que je peux dire, le fichier doit être dans une sorte de fichier que vous pouvez lireread.table()
.Juste pour mémoire, j'ai essayé de traduire la réponse de Dirk en code :-P
la source
scan()
; vous pouvez utiliserread.table()
et al directement sur une connexion. Voir ma réponse modifiée,J'ai utilisé le package CRAN "downloader" trouvé à http://cran.r-project.org/web/packages/downloader/index.html . Beaucoup plus facile.
la source
Pour Mac (et je suppose Linux) ...
Si l'archive zip contient un seul fichier, vous pouvez utiliser la commande bash
funzip
, en conjonction avec àfread
partir dudata.table
package:Dans les cas où l'archive contient plusieurs fichiers, vous pouvez utiliser à la
tar
place pour extraire un fichier spécifique vers stdout:la source
File is empty:
Voici un exemple qui fonctionne pour les fichiers qui ne peuvent pas être lus avec la
read.table
fonction. Cet exemple lit un fichier .xls.la source
Pour ce faire à l'aide de data.table, j'ai trouvé que ce qui suit fonctionne. Malheureusement, le lien ne fonctionne plus, j'ai donc utilisé un lien pour un autre ensemble de données.
Je sais que cela est possible en une seule ligne car vous pouvez transmettre des scripts bash à
fread
, mais je ne sais pas comment télécharger un fichier .zip, extraire et transmettre un seul fichier à partir de celui-cifread
.la source
Essayez ce code. Ça marche pour moi:
Exemple:
la source