如何从R连接到Statistics Canada JSON

时间:2017-07-27 20:55:51

标签: json r

我正在尝试通过R连接到在线数据库,可在此处找到: http://open.canada.ca/data/en/dataset/2270e3a4-447c-45f6-8e63-aea9fe94948f

如何将数据表加载到R中,然后只需更改代码中的表名即可访问其他表?我并不特别关心我需要使用哪种语言(JSON,JSOn-LD,XML)。

提前致谢!

2 个答案:

答案 0 :(得分:1)

假设您知道每个数据集的URL,可以在此处找到类似的问题:

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列表并执行以下操作:

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)

当在CSV中读取时,争论skip = 2将跳过前两行,并将产生一些标题名称。因为标题是数字,所以X将放在前面。在这种情况下,第2行在第二列中将具有值“number”。不幸的是,这个数据似乎是打算在excel中使用,这真的很难过。

答案 1 :(得分:0)

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

2)使用“read.csv”或“read_csv”或“fread”将该csv文件读入R中。

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

3)您可以将csv命名为您想要的任何对象名称。