156 votes

Utilisation de R pour télécharger un fichier de données compressé, extraire et importer des données

@EZGraphs sur Twitter écrit: "Beaucoup de csv en ligne sont compressés. Est-il possible de télécharger, décompresser l'archive et de charger les données dans un data.frame à l'aide de R? #Rstats"

J'essayais aussi de faire cela 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 je me sens comme si je suis loin. Des pensées?

211voto

Dirk Eddelbuettel Points 134700

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 devez

  1. Créer un temp. nom de fichier (par exemple, tempfile())
  2. Utiliser download.file() d'extraire le fichier dans le temp. fichier
  3. Utiliser unz() d'extraire le fichier cible de temp. fichier
  4. Supprimer les fichiers temporaires via unlink()

qui dans le code (merci pour l'exemple de base, mais c'est plus simple) ressemble

temp <- tempfile()
download.file("http://www.newcl.org/data/zipfiles/a1.zip",temp)
data <- read.table(unz(temp, "a1.dat"))
unlink(temp)

Comprimé (.z) ou au format gzip (.gz) ou bzip2ed (.bz2) les fichiers sont simplement 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 :)

34voto

George Dontas Points 12116

Pour mémoire, j'ai essayé de traduire la réponse de Dirk en code :-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)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X