访问URL并使用R读取数据


70

有没有一种方法可以指定Web站点URL并将其从数据获取到CSV文件,以便使用R进行分析?

Answers:


77

在最简单的情况下,只需执行

X <- read.csv(url("http://some.where.net/data/foo.csv"))

加上read.csv()可能需要的选项。

在2020年9月或9年后编辑:

几年来,R还支持将URL直接传递给read.csv

X <- read.csv("http://some.where.net/data/foo.csv")

2020年底编辑。原始帖子继续。

长答案:是可以做到的,许多软件包已经使用该功能很多年了。例如,tseries软件包正是使用此功能从Yahoo!下载股票价格。近十年:

R> library(tseries)
Loading required package: quadprog
Loading required package: zoo

    ‘tseries’ version: 0.10-24

    ‘tseries’ is a package for time series analysis and computational finance.

    See ‘library(help="tseries")’ for details.

R> get.hist.quote("IBM")
trying URL 'http://chart.yahoo.com/table.csv?    ## manual linebreak here
  s=IBM&a=0&b=02&c=1991&d=5&e=08&f=2011&g=d&q=q&y=0&z=IBM&x=.csv'
Content type 'text/csv' length unknown
opened URL
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
........
downloaded 258 Kb

             Open   High    Low  Close
1991-01-02 112.87 113.75 112.12 112.12
1991-01-03 112.37 113.87 112.25 112.50
1991-01-04 112.75 113.00 111.87 112.12
1991-01-07 111.37 111.87 110.00 110.25
1991-01-08 110.37 110.37 108.75 109.00
1991-01-09 109.75 110.75 106.75 106.87
[...]

这一切得非常好,在手册页记录help(connection)help(url)。另请参阅R随附的“数据导入/导出”手册。


在最简单的情况下,只需 X <- read.csv(url("http://some.where.net/data/foo.csv"))加上read.csv()可能需要的选项即可。
心理经济学

如何关闭此连接?
user3293338

我试过了,但是没有用。有人可以帮忙吗?cv_today <- read.csv(url("https://github.com/eparker12/nCoV_tracker/blob/master/input_data/coronavirus_today.csv"))
Ben10

网址错误。导航到文件,raw在Web界面中选择,使用该URL。
德克·埃德比布特

10

基础

read.csv没有该url功能就可以正常工作。如果Dirk Eddelbuettel将其包含在他的答案中,可能我会丢失一些东西:

ad <- read.csv("http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv")
head(ad)

  X    TV radio newspaper sales
1 1 230.1  37.8      69.2  22.1
2 2  44.5  39.3      45.1  10.4
3 3  17.2  45.9      69.3   9.3
4 4 151.5  41.3      58.5  18.5
5 5 180.8  10.8      58.4  12.9
6 6   8.7  48.9      75.0   7.2

使用两个流行软件包的另一个选择:

数据表

library(data.table)
ad <- fread("http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv")
head(ad)

V1    TV radio newspaper sales
1:  1 230.1  37.8      69.2  22.1
2:  2  44.5  39.3      45.1  10.4
3:  3  17.2  45.9      69.3   9.3
4:  4 151.5  41.3      58.5  18.5
5:  5 180.8  10.8      58.4  12.9
6:  6   8.7  48.9      75.0   7.2

阅读器

library(readr)
ad <- read_csv("http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv")
head(ad)

# A tibble: 6 x 5
     X1    TV radio newspaper sales
  <int> <dbl> <dbl>     <dbl> <dbl>
1     1 230.1  37.8      69.2  22.1
2     2  44.5  39.3      45.1  10.4
3     3  17.2  45.9      69.3   9.3
4     4 151.5  41.3      58.5  18.5
5     5 180.8  10.8      58.4  12.9
6     6   8.7  48.9      75.0   7.2

您的答案是在我的许多年之后提出的,实际上,代码已更改为支持更直接的方法。但是当我写我的答案时它不可用。
德克·埃德尔布特尔

9

网页上的数据通常以XML表的形式出现。您可以通过读取XML表格分为R包XML

在这个包中,功能

readHTMLTable(<url>)

将浏览一页XML表并返回数据帧列表(每个找到的表一个)。


7

read.csv(url("..."))您旁边还可以使用read.table("http://...")

例:

> sample <- read.table("http://www.ats.ucla.edu/stat/examples/ara/angell.txt")
> sample
                V1   V2   V3   V4 V5
1        Rochester 19.0 20.6 15.0  E
2         Syracuse 17.0 15.6 20.2  E
...
43         Atlanta  4.2 70.6 32.6  S
> 

1
这是一个很好的答案,广泛用于r-graph-gallery中以读取csv来自github的数据
RK1'4

2

scan可以自动从网页读取;您不必一定要弄乱连接。


可能您需要连接才能访问(毕竟是远程)网页。连接是一个很棒的抽象,它允许您以一致的方式使用文件,URL,从命令等pp到stdout的管道。
Dirk Eddelbuettel 2011年

我并不是怀疑连接是否有用,但是用于扫描的帮助文件说“文件也可以是完整的URL”。我已经在没有正式联系的情况下做到了这一点,并且确实可以工作。
亚伦(Aaron)

但你通常不希望scan,而是read.table()或者read.csv(),给你更高级别的访问。
Dirk Eddelbuettel 2011年

真正。我知道现在我读的是标题,而不是问题,它说的是CSV文件。如果文件格式不标准,那就是您(可能)想要的时间scan。(这就是我使用过的情况。)
Aaron
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.