【问题标题】:Read a CSV from github into R将 CSV 从 github 读入 R
【发布时间】:2013-01-04 16:33:46
【问题描述】:

我正在尝试将 CSV 从 github 读入 R:

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

但是,这给了我:

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

我尝试了?read.csv、?download.file、getURL(只返回了奇怪的 HTML)以及data import manual,但仍然不明白如何使其工作。

我做错了什么?

【问题讨论】:

    标签: r data-manipulation data-management


    【解决方案1】:

    试试这个:

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

    你有两个问题:

    1. 您没有链接到“原始”文本文件,而是 Github 的显示版本(访问 https:\raw.github.com....csv 的 URL 以查看 raw version 和 @ 之间的区别987654322@)。
    2. https 在很多情况下对 R 来说是个问题,所以你需要使用像 RCurl 这样的包来解决它。在某些情况下(但不是在 Github 上),您可以简单地将 https 替换为 http 并解决问题,因此您总是可以先尝试一下,但我发现使用 RCurl 可靠且不需要太多额外的输入。

    【讨论】:

    • 你如何解决Error in function (type, msg, asError = TRUE) : SSL certificate problem: unable to get local issuer certificate?
    • 也可以写成一行用于内存/空间目的:y &lt;- read.csv(text=getURL("https://raw.github.com/aronlindberg/latent_growth_classes/master/LGC_data.csv"))
    • 我试过了,但没有用。 x &lt;- getURL("https://github.com/eparker12/nCoV_tracker/blob/master/input_data/coronavirus_today.csv") y &lt;- read.csv(text = x)
    • @Ben10,您没有使用原始 URL。你可以试试看它是否有效?
    【解决方案2】:

    来自url的文档:

    请注意,不支持“https://”连接(有些 Windows 上的例外情况)。

    所以问题是 R 不允许连接到https URL。

    您可以将download.file 与curl 一起使用:

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

    【讨论】:

    • @DirkEddelbuettel 虽然它确实取决于安装 Curl
    【解决方案3】:

    我正在使用 R 3.0.2,这段代码可以完成这项工作。

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

    还有这个

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

    编辑(会话信息)

    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
    

    【讨论】:

    • 引用?url:请注意,除 Windows 外,不支持“https://”URL 方案。
    【解决方案4】:

    意识到这个问题已经很老了,Google 仍然将其报告为最高结果(至少对我而言),因此我决定提供 2015 年的答案。

    人们现在普遍迁移到curl 包(包括著名的httr),如by r-bloggers 所述,它提供了以下非常简单的解决方案:

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

    【讨论】:

      【解决方案5】:

      以与 akhmed 类似的方式,我想我会更新答案,因为现在您可以使用 Hadley 的 readr 包。 只需要注意一件事:您需要将网址作为 原始 内容(请参阅下面的 //raw.git...)。 这是一个例子:

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

      瞧!

      【讨论】:

        【解决方案6】:

        这就是我一直在帮助开发 rio 的目的。它基本上是一个通用的数据导入/导出包,支持 HTTPS/SSL 并从其扩展名中推断文件类型,因此您可以使用一个导入功能读取基本上任何内容:

        library("rio")
        

        如果您从 Github 获取 CSV 的“原始”网址,则可以使用 import 将其加载一行:

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

        结果是一个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
        ...
        

        【讨论】:

        • 我试试这个并得到get_ext(file) : file has no extension
        • @Adrian 在最新的 Github 版本中有一个小错字。从 CRAN 安装旧版本或从 Github 重新安装,它应该适合你。
        • 谢谢 - 问题已解决。您的解决方案是唯一对我有用的解决方案(Windows 8.1)
        【解决方案7】:

        现在 GitHub 似乎希望您通过他们的 API 来获取内容。我使用gh包如下:

        require(gh)
        
        tmp = tempfile()
        qurl = 'https://raw.githubusercontent.com/aronlindberg/latent_growth_classes/master/LGC_data.csv'
        # download
        gh(paste0('GET ', qurl), .destfile = tmp, .overwrite = TRUE)
        # read
        read.csv(tmp)
        

        重要的部分是您提供个人访问令牌 (PAT)。通过gh(.token = ) 参数,或者像我一样,通过在~/.Renviron 文件[1] 中全局设置PAT。当然,您首先必须在您的GitHub account 创建 PAT。

        [1] ~/.Renviron,我猜是所有r-lib 包首先搜索的,因为gh 是一个。其中的令牌应如下所示:

        GITHUB_PAT = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        

        您也可以使用 usethis 包来设置 PAT。

        【讨论】:

          【解决方案8】:

          一种相当愚蠢的方式...使用剪贴板中的复制/粘贴

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

          【讨论】:

            【解决方案9】:

            至少对我来说,curl 在 Windows 中可能不起作用

            这在 Windows 中对我有用

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

            在 Linux 中

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

            【讨论】:

              【解决方案10】:

              正如其他帖子所述,只需转到 github 上的原始代码链接即可。

              例如:

              x

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-09-29
                • 2013-05-26
                相关资源
                最近更新 更多