2017-07-27 48 views

回答

1

假设你知道每个数据集的网址类似的问题可以在这里找到:

Download a file from HTTPS using download.file()

为此,它变成了:

library(RCurl) 

URL <- "http://www.statcan.gc.ca/cgi-bin/sum-som/fl/cstsaveascsv.cgi?filename=labr71a-eng.htm&lan=eng" 
x <- getURL(URL) 
URLout <- read.csv(textConnection(x),row.names=NULL) 

我通过右键获得的URL点击访问按钮并复制地址。

我不得不宣布row.names=NULL为列的第一行中的数量不等于列数其他地方,从而read.csv假定行名as described here。我不确定这些数据集的URL在更新时是否会发生变化,但这不是获取此数据的真正方便的方法。对于直观地能够更改数据集,JSON似乎不太好。

至少这样你可以创建一个网址列表,并执行以下操作:

URL <- list(getURL("http://www.statcan.gc.ca/cgi-bin/sum-som/fl/cstsaveascsv.cgi?filename=labr71a-eng.htm&lan=eng"), 
      getURL("http://www.statcan.gc.ca/cgi-bin/sum-som/fl/cstsaveascsv.cgi?filename=labr72-eng.htm&lan=eng")) 

URLout <- lapply(URL,function(x) read.csv(textConnection(x),row.names=NULL,skip=2)) 

再次我不喜欢有申报row.names=NULL,当我看一下这个文件我没有看到的但是这至少会使文件进入R环境。对多个URL执行操作可能需要更多的工作。

在进一步的努力以获得有用colnames

URL <- "http://www.statcan.gc.ca/cgi-bin/sum-som/fl/cstsaveascsv.cgi?filename=labr71a-eng.htm&lan=eng" 
x <- getURL(URL) 
URLout <- read.csv(textConnection(x),row.names=NULL, skip=2) 

的arguement skip = 2在CSV读取时将跳过该第一2行,并且将产生一些标题名称。由于标题是数字,因此X将放在前面。在这种情况下,第2行在第二列中将具有值“数字”。不幸的是,这些数据似乎是用于excel的,这真的很让人伤心。

+0

它确实导入了表格,但看起来好像没有简单的方法可以通过选择表格名称来导入数据,因为它不在URL中。谢谢! – Duke

+0

是的,我也希望得到那种痛苦。此外,他们的CSV名称非常差。现在我会好奇他们是否有某种命名约定文档,可能会帮助你理清哪里生活在哪里。我也检查了元数据文件。没有真正产生很多信息。 – Badger

0

1)您需要将CSV下载到您有权访问的某个目录中。

2)使用 “read.csv”,或 “read_csv”,或 “FREAD” 来读取CSV文件导入R.

yourTableName<-read.csv("C:/..../canadaDataset.csv") 

3)您可以名CSV到任何你想要的对象名。

+0

是的,但那意味着我必须单独下载表格。我正在寻找一种方法来创建我想要的表的列表,然后执行该脚本,以便我可以直接从该站点一次拉出所有表。另外,如果数据发生变化,我将不得不重新拉动所有表格......这将不方便 – Duke

+0

由于这是一个web表单(?cgi),我不完全确定如何一次拉出所有表格来自网站。如果该文件位于“statcan.gc.ca/dataset.csv”网站上,那么这是一个完全不同的故事...... – skhan8