68

我正在尝试将 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),以及数据导入手册,但仍然无法理解如何使其工作。

我究竟做错了什么?

4

10 回答 10

110

试试这个:

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. 在许多情况下,https 对 R 来说是个问题,因此您需要使用类似的包RCurl来解决它。在某些情况下(虽然不是 Github),您可以简单地将 https 替换为 http 并解决问题,因此您始终可以先尝试一下,但我发现使用 RCurl 是可靠的,并且不需要太多额外的输入。
于 2013-01-21T15:25:17.720 回答
26

从以下文档url

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

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

您可以download.file使用curl

download.file("https://raw.github.com/aronlindberg/latent_growth_classes/master/LGC_data.csv", 
    destfile = "/tmp/test.csv", method = "curl")
于 2013-01-21T15:25:12.987 回答
22

我正在使用 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
于 2014-03-03T07:36:09.513 回答
8

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

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

library(curl)

x <- read.csv( curl("https://raw.githubusercontent.com/trinker/dummy/master/data/gcircles.csv") )
于 2015-07-02T07:57:57.010 回答
8

以类似于 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")

瞧!

于 2016-05-14T00:28:42.973 回答
4

这就是我一直在帮助开发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
...
于 2015-02-25T19:23:23.827 回答
1

现在似乎 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 帐户中创建 PAT 。

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

GITHUB_PAT = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

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

于 2020-11-11T16:25:31.633 回答
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")
于 2015-08-26T01:44:00.733 回答
0

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

x <- read.table(file = "clipboard", sep = "t", header=TRUE)
于 2019-03-26T14:13:33.153 回答
0

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

例如:

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

于 2021-05-29T17:09:31.130 回答