将 CSV 从 github 读取到 R 中

Read a CSV from github into R

提问人:histelheim 提问时间:1/21/2013 最后编辑:pnutshistelheim 更新时间:5/19/2023 访问量:74099

问:

我正在尝试将 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

我尝试了 、 、(只返回奇怪的 HTML)以及数据导入手册,但仍然无法理解如何让它工作。?read.csv?download.filegetURL

我做错了什么?

r 操作 数据 管理

评论


答:

26赞 Paul Hiemstra 1/21/2013 #1

从文档:url

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

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

您可以与以下功能一起使用:download.filecurl

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

评论

8赞 hadley 1/22/2013
@DirkEddelbuettel虽然它确实取决于是否安装了 Curl
115赞 A5C1D2H2I1M1N2O1R2T1 1/21/2013 #2

试试这个:

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 的 URL。csv 以查看原始版本和显示版本之间的差异)。
  2. https 在很多情况下是 R 的一个问题,所以你需要使用一个包来绕过它。在某些情况下(虽然不是 Github),您可以简单地将 https 替换为 http 并解决问题,因此您始终可以先尝试一下,但我发现使用 RCurl 可靠且没有太多额外的输入。RCurl

评论

6赞 Hack-R 1/9/2015
你如何解决?Error in function (type, msg, asError = TRUE) : SSL certificate problem: unable to get local issuer certificate
1赞 bjoseph 3/23/2015
也可以写成一行,用于内存/空间目的:y <- read.csv(text=getURL("https://raw.github.com/aronlindberg/latent_growth_classes/master/LGC_data.csv"))
0赞 Ben10 5/15/2020
我试过了,但没有用。x <- getURL("https://github.com/eparker12/nCoV_tracker/blob/master/input_data/coronavirus_today.csv") y <- read.csv(text = x)
0赞 A5C1D2H2I1M1N2O1R2T1 5/15/2020
@Ben10,您没有使用原始 URL。你能试试看它是否有效吗?
23赞 Maciej 3/3/2014 #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))

编辑 (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

评论

2赞 daroczig 5/16/2014
引用自:请注意,除 Windows 外,不支持“https://”URL 方案。?url
4赞 Thomas 2/26/2015 #4

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

library("rio")

如果您从 Github 获取 CSV 的“原始”url,则可以将其加载一行: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
...

评论

0赞 Adrian 5/28/2015
我试试这个,得到get_ext(file) : file has no extension
0赞 Thomas 5/28/2015
@Adrian 在最新的 Github 版本中有一个小错别字。从 CRAN 安装旧版本或从 Github 重新安装,它应该适合您。
0赞 Adrian 5/28/2015
谢谢 - 问题已解决。您的解决方案是唯一适合我的解决方案 (Windows 8.1)
8赞 akhmed 7/2/2015 #5

意识到这个问题已经很老了,谷歌仍然将其报告为最佳结果(至少对我来说是这样),所以我决定提供 2015 年的答案。

人们现在通常迁移到 r-bloggers 所描述的包(包括著名的),它提供了以下非常简单的解决方案:curlhttr

library(curl)

x <- read.csv( curl("https://raw.githubusercontent.com/trinker/dummy/master/data/gcircles.csv") )
0赞 akhil vangala 8/26/2015 #6

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")
15赞 RobertMyles 5/14/2016 #7

与 akhmed 的风格类似,我想我会更新答案,因为现在你可以只使用 Hadley 的包。 需要注意的一点是:您需要将 url 作为原始内容(见下文)。 下面是一个示例:readr//raw.git...

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

瞧!

0赞 Lefty 3/26/2019 #8

一个相当虚拟的方式......使用从剪贴板复制/粘贴

x <- read.table(file = "clipboard", sep = "t", header=TRUE)
2赞 andschar 11/12/2020 #9

现在似乎 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)。要么通过参数,要么像我一样,通过在文件 [1] 中全局设置 PAT。当然,您首先必须在 GitHub 帐户中创建 PAT。gh(.token = )~/.Renviron

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

GITHUB_PAT = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

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

0赞 zeejay 5/30/2021 #10

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

例如:

x <- read.csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2018/2018-04-23/week4_australian_salary.csv")