L'utilisation de R pour télécharger zippée fichier de données, extraire et importer des données
@EZGraphs sur Twitter a écrit:
"Beaucoup de en ligne csvs sont zippés. Est-il un moyen pour télécharger, décompresser l'archive, et de charger les données d'un ensemble de données.cadre de l'utilisation de R? #Rstats"
J'ai également essayer de faire ça aujourd'hui, mais il a fini juste le téléchargement du 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 je me sens comme si je suis loin.
Toutes les pensées?
- Fait-il? Si oui, pourquoi vous vous sentez toujours que vous êtes un long chemin?
- Nope. le code dans ma question ne fonctionne pas. Voir les réponses ci-dessous.
Vous devez vous connecter pour publier un commentaire.
Les archives Zip sont en fait plus un "système de fichiers" avec le contenu de métadonnées etc. Voir
help(unzip)
pour plus de détails. Donc pour faire ce que vous esquisser ci-dessus, vous deveztempfile()
)download.file()
pour aller chercher le fichier dans le 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
Comprimé (
.z
) ou au format gzip (.gz
) ou bzip2ed (.bz2
) les fichiers sont juste le fichier et ceux que vous pouvez lire directement à partir d'une connexion. Ainsi, obtenir le fournisseur de données pour l'utiliser à la place 🙂.z
archive? Je peux lire à partir d'une url de connexion avecreadBin(url(x, "rb"), 'raw', 99999999)
, mais comment pourrais-je extraire les données contenues? Leuncompress
colis a été retiré de CRAN - est-ce possible dans la base de R (et si oui, est-elle limitée à des systèmes *nix?)? Heureux de poster une nouvelle question le cas échéant.help(gzfile)
-- je pensais que le gzip protocole peut maintenant décompresser pierre (ancienne) .z les fichiers trop maintenant que le brevet a longtemps expiré. Il ne peut pas. Qui l'utilise .z, de toute façon? Les années 1980 on les appelle, ils veulent que leur compression de retour 😉readRDS()
(au moins pour moi). À partir de ce que je peux dire, le fichier doit être dans un type de fichier que vous pouvez lire avecread.table()
.Juste pour le record, j'ai essayé de traduire de Dirk réponse dans le code 😛
scan()
; vous pouvez utiliserread.table()
et al directement sur une connexion. Voir mon édité réponse,J'ai utilisé CRAN package "downloader", à http://cran.r-project.org/web/packages/downloader/index.html . Beaucoup plus facile.
Pour Mac (et je suppose Linux)...
Si l'archive zip contient un fichier unique, vous pouvez utiliser la commande bash
funzip
, en étroite collaboration avecfread
de ladata.table
package:Dans les cas où l'archive contient plusieurs fichiers, vous pouvez utiliser
tar
au lieu d'extraire un fichier spécifique à stdout:File is empty:
Voici un exemple qui fonctionne pour les fichiers qui ne peuvent pas être lues avec le
read.table
fonction. Cet exemple lit .fichier xls.Essayer ce code. Il fonctionne pour moi:
Exemple:
Pour ce faire à l'aide de données.tableau, j'ai trouvé que les œuvres suivantes. Malheureusement, le lien ne fonctionne plus, j'ai donc utilisé un lien pour un autre ensemble de données.
Je sais que c'est possible en une seule ligne puisque vous pouvez passer des scripts bash pour
fread
, mais je ne suis pas sûr de la façon de télécharger un .fichier zip, extraire, et de passer un seul fichier àfread
.