3

我刚开始使用 R,所以这可能是一个非常愚蠢的问题。我正在尝试使用以下方法导入数据:

emdata=read.csv(file="http://lottery.merseyworld.com/cgi-bin/lottery?days=19&Machine=Z&Ballset=0&order=1&show=1&year=0&display=CSV",header=TRUE)

我的问题是它将 csv 文件读入单个列(顺便说一下,彩票数据只是因为它可以公开下载 - 用作练习以了解我在 R 中可以做什么和不能做什么),而不是将其格式化为有多少列数据。请有人介意帮忙,尽管这很微不足道

4

2 回答 2

4

嗯,对于声称是 csv 格式的页面来说,这有点令人讨厌。您可以跳过前 5 行,这将导致 R 正确读取(大部分)文件的其余部分。

emdata=read.csv(file=...., header=TRUE, skip=5)

通过查看源代码,我得到了要跳过的行数。您仍然必须删除中间和末尾的杂物,然后清理列(由于嵌入的文本,它们都是因素)。

将页面保存到硬盘上,编辑它以删除所有无用的部分,然后导入它会容易得多。

...要回答您真正的问题,是的,您可以直接从网络导入数据。通常,无论您在何处读取文件,都可以替换为完全限定的 URL——R 足够聪明,可以做正确的事情[tm]。这个特定的 URL 恰好特别混乱。

于 2013-10-27T08:07:57.640 回答
0

您可以从给定的 url 读取文本,过滤掉令人讨厌的行,然后将结果读取为 CSV,如下所示:

lines <- readLines(url("http://lottery.merseyworld.com/cgi-bin/lottery?days=19&Machine=Z&Ballset=0&order=1&show=1&year=0&display=CSV"))
read.csv(text=lines[grep("([^,]*,){5,}", lines)])

上面的正则表达式匹配任何包含至少五个逗号的行。

于 2013-10-27T16:42:23.477 回答