【问题标题】:Download a xls file from url into a dataframe (Rcurl)?将 url 中的 xls 文件下载到数据框 (Rcurl) 中?
【发布时间】:2013-10-26 08:58:45
【问题描述】:

我正在尝试将以下网址下载到 R 数据框中:

http://www.fantasypros.com/nfl/rankings/qb.php/?export=xls

(这是公共页面上的“导出”链接:http://www.fantasypros.com/nfl/rankings/qb.php/

但是,我不确定如何“解析”数据?我还希望将其自动化并每周执行一次,因此任何关于如何将其构建为每周访问工作流的想法将不胜感激!谷歌搜索和搜索 stackoverflow 几个小时了,但无济于事...... :-)

谢谢,

贾斯汀

尝试的代码:

getURL("http://www.fantasypros.com/nfl/rankings/qb.php?export=xls")

这只是给了我一个开头的字符串:

[1] "FantasyPros.com \t \nWeek 8 - QB Rankings \t \nExpert Consensus Rankings (ECR) \t \n\n Rank \t Player Name \tTeam \t Matchup \tBest Rank \t Worst Rank \t Ave Rank \t Std Dev \t\n1\tPeyton Manning\tDEN\t vs. WAS\t1\t5\t1.2105263157895\t0.58877509625419\t\t\n2\tDrew Brees\tNO\t vs. BUF\t1\t7\t2.6287878787879\t1.0899353819483\t\t\n3\tA...

【问题讨论】:

  • * 我还忘了补充一点,我还需要考虑排除 xls 文件的前 4 行(第 5 行 = 列标题)

标签: r xls rcurl geturl


【解决方案1】:

欢迎来到R。听起来您喜欢在 Excel 中进行分析。这完全没问题,但事实上您要求从网络上抓取数据并且正在询问 R,我认为可以安全地假设您将开始找到对您的分析进行编程是要走的路。

也就是说,您真正想做的是抓取网络。关于如何使用 R 执行此操作的示例很多,就在 SO 上。寻找诸如“网络抓取”、“抓取”和“屏幕抓取”之类的内容。

好的,对话放在一边。不用担心抓取 XL 格式的数据。您可以直接使用 R 解析数据。大多数网站使用一致的命名约定,因此使用 for 循环并为您的数据集构建 URL 将很容易。

以下是直接使用 R 将页面解析为 data.frame 的示例,其行为与 XL 中的表格数据非常相似。

## load the packages you will need
# install.packages("XML")
library(XML)

## Define the URL -- you could dynamically build this
URL = "http://www.fantasypros.com/nfl/rankings/qb.php"

## Read the tables form the page into R
tables = readHTMLTable(URL)

## how many do we have
length(tables)

## look at the first one
tables[1]
## thats not it

## lets look at the 2nd table
tables[2]

## bring it into a dataframe
df = as.data.frame(tables[2])

如果您是第一次使用R,您可以使用命令install.packages("PackageNameHere") 轻松安装外部软件包。但是,如果您认真学习 R,我会考虑使用 RStudio IDE。它真的让我在很多层面上的学习曲线变平了。

【讨论】:

  • +1 无需下载文件并使用readHTMLTable!
【解决方案2】:

您可能只使用 gdata 库中的 download.fileread.xls。我认为您不能跳过读取 .xls 文件的行,但您可以提供一个 pattern 参数,以便它在文件中读取,直到在您的数据行中看到该模式。

library(gdata)
download.file("http://www.fantasypros.com/nfl/rankings/qb.php?export=xls", destfile="file.xls")

ffdata<- read.xls("file.xls", header=TRUE, pattern="Rank")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-12
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多