从Github读取一个CSV文件到R中。

70

我正在尝试从github将CSV文件读入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.filegetURL(它只返回了奇怪的HTML),以及数据导入手册,但仍然不明白如何使它运作。

我做错了什么?

10个回答

115

试试这个:

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,以查看原始版本显示版本之间的差异)。
  2. 对于R来说,https在许多情况下是一个问题,因此您需要使用像RCurl这样的软件包来解决它。在某些情况下(不适用于Github),您可以简单地将https替换为http,然后事情就会解决,因此您可以首先尝试一下,但我发现使用RCurl可靠且不需要太多额外的输入。

6
你如何解决 Error in function (type, msg, asError = TRUE) : SSL证书问题:无法获取本地颁发者证书? - Hack-R
1
可以为了节省内存/空间而将其写成一行:y <- read.csv(text=getURL("https://raw.github.com/aronlindberg/latent_growth_classes/master/LGC_data.csv")) - bjoseph
我尝试过这个,但它没有起作用。x <- getURL("https://github.com/eparker12/nCoV_tracker/blob/master/input_data/coronavirus_today.csv") y <- read.csv(text = x) - Ben10
@Ben10,你没有使用原始URL。你能试试用那个看看是否有效吗? - A5C1D2H2I1M1N2O1R2T1

26

根据url的文档:

请注意,不支持‘https://’连接(在某些Windows上有例外情况)。

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

您可以使用curldownload.file实现:

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

8
@DirkEddelbuettel,这取决于是否安装了Curl。 - hadley

23

我正在使用 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
?url 引用:请注意,除了 Windows 之外,不支持 https:// URL 方案。 - daroczig

15

类似于akhmed的风格,我想我会更新答案,因为现在你可以使用Hadley的readr包。 只需要注意一件事:您需要将url设置为原始内容(请参见下面的//raw.git...)。 这是一个例子:

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

看这里!


8

尽管这个问题非常古老,但谷歌仍将其报告为顶部结果(至少对我来说是如此),因此我决定提供2015年的答案。

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

library(curl)

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

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

如果你从Github获取CSV的“原始”url,你可以使用import命令加载它的一行:

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

结果是一个数据框:
     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):文件没有扩展名”的提示。 - Adrian
@Adrian 最近的Github版本中有一个小错别字。您可以从CRAN安装旧版本,或者重新从Github安装,这样应该就能正常工作了。 - Thomas
谢谢 - 问题已解决。你的解决方案是唯一一个在我这里(Windows 8.1)有效的。 - Adrian

2
最近似乎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文件中全局设置PAT。当然,你首先必须在GitHub账户上创建PAT。
[1]~/.Renviron,我猜所有r-lib包都会首先搜索它,因为gh就是其中之一。其中的令牌应该长这样:
GITHUB_PAT = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

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

0
一种相当愚笨的方法...从剪贴板中复制/粘贴
x <- read.table(file = "clipboard", sep = "t", header=TRUE)

0

对我来说,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")

0

正如其他帖子所提到的,只需访问Github上的原始代码链接。

例如:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接