web-dev-qa-db-fra.com

Lire un CSV de github dans R

J'essaie de lire un CSV de github dans R:

latent.growth.data <- read.csv("https://github.com/aronlindberg/latent_growth_classes/blob/master/LGC_data.csv")

Cependant, cela me donne:

Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") : unsupported URL scheme

J'ai essayé ?read.csv, ?download.file, getURL (qui n'a renvoyé que du code HTML étrange), ainsi que le manuel d'importation de données , mais ne comprend toujours pas comment le faire fonctionner.

Qu'est-ce que je fais mal?

47
histelheim

Essaye ça:

library(RCurl)
x <- getURL("https://raw.github.com/aronlindberg/latent_growth_classes/master/LGC_data.csv")
y <- read.csv(text = x)

Vous avez deux problèmes:

  1. Vous n'êtes pas lié au fichier "brut", mais à la version d'affichage de Github (visitez l'URL pour https:\raw.github.com .... csv pour voir la différence entre version brute et version d'affichage ).
  2. https est un problème pour R dans de nombreux cas, vous devez donc utiliser un package comme RCurl pour le contourner. Dans certains cas (pas avec Github, cependant), vous pouvez simplement remplacer https par http et les choses fonctionnent, vous pouvez donc toujours essayer cela en premier, mais je trouve que l'utilisation de RCurl est fiable et pas trop de frappe supplémentaire.
87

À partir de la documentation de url:

Notez que les connexions ‘https: //’ ne sont pas prises en charge (à quelques exceptions près sous Windows).

Le problème est donc que R n'autorise pas les connexions aux https URL.

Vous pouvez utiliser download.file avec curl:

download.file("https://raw.github.com/aronlindberg/latent_growth_classes/master/LGC_data.csv", 
    destfile = "/tmp/test.csv", method = "curl")
22
Paul Hiemstra

J'utilise R 3.0.2 et ce code fait le travail.

urlfile<-'https://raw.github.com/aronlindberg/latent_growth_classes/master/LGC_data.csv'
dsin<-read.csv(urlfile)

et cela aussi

urlfile<-'https://raw.github.com/aronlindberg/latent_growth_classes/master/LGC_data.csv'
dsin<-read.csv(url(urlfile))

modifier (sessionInfo)

R version 3.0.2 (2013-09-25)
Platform: i386-w64-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=Polish_Poland.1250  LC_CTYPE=Polish_Poland.1250   
[3] LC_MONETARY=Polish_Poland.1250 LC_NUMERIC=C                  
[5] LC_TIME=Polish_Poland.1250    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_3.0.2
15
Maciej

Dans un style similaire à akhmed, je pensais que je mettrais à jour la réponse, car maintenant vous pouvez simplement utiliser le package readr de Hadley. Une seule chose à noter: vous aurez besoin que l'URL soit le contenu raw (voir le //raw.git... au dessous de). Voici un exemple:

library(readr)
data <- read_csv("https://raw.githubusercontent.com/RobertMyles/Bayesian-Ideal-Point-IRT-Models/master/Senate_Example.csv")

Voilà!

6
RobertMyles

Conscient que la question est très ancienne, Google l'a toujours signalée comme un résultat optimal (du moins pour moi), j'ai donc décidé de fournir la réponse pour l'année 2015.

Les gens migrent généralement vers le package curl (y compris le célèbre httr) comme décrit par r-bloggers qui offre la solution très simple suivante:

library(curl)

x <- read.csv( curl("https://raw.githubusercontent.com/trinker/dummy/master/data/gcircles.csv") )
5
akhmed

C'est ce que j'ai aidé à développer rio pour. Il s'agit essentiellement d'un package d'importation/exportation de données universel qui prend en charge HTTPS/SSL et déduit le type de fichier à partir de son extension, vous permettant ainsi de lire pratiquement n'importe quoi en utilisant une fonction d'importation:

library("rio")

Si vous récupérez l'URL "brute" de votre CSV depuis Github, vous pouvez la charger sur une ligne avec import:

import("https://raw.githubusercontent.com/aronlindberg/latent_growth_classes/master/LGC_data.csv")

Le résultat est un data.frame:

     top100_repository_name   month monthly_increase monthly_begin_at monthly_end_with
1                    Bukkit 2012-03                9              431              440
2                    Bukkit 2012-04               19              438              457
3                    Bukkit 2012-05               19              455              474
4                    Bukkit 2012-06               18              475              493
5                    Bukkit 2012-07               15              492              507
6                    Bukkit 2012-08               50              506              556
...
3
Thomas

Une façon plutôt fictive ... d'utiliser le copier/coller à partir du presse-papiers

x <- read.table(file = "clipboard", sep = "t", header=TRUE)
0
Lefty

curl pourrait ne pas fonctionner dans les fenêtres au moins pour moi

C'est ce qui a fonctionné pour moi dans Windows

download.file (" https://github.com/aronlindberg/latent_growth_classes/master/LGC_data.csv ", destfile = "/tmp/test.csv",method="wininet")

Sous Linux

download.file (" https://github.com/aronlindberg/latent_growth_classes/master/LGC_data.csv ", destfile = "/tmp/test.csv",method="curl")

0
akhila vangala