我正在尝试使用CSV格式的API导入R中的数据。url为https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM/csv
我尝试的是:
url <- "https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM/csv"
data <- read.csv(url)
但这并没有产生预期的结果。数据帧将所有值作为标头。我认为问题是url没有下载实际的csv文件。相反,API生成CSV格式的基于浏览器的表。这可以通过尝试url来验证。
对如何正确导入有什么想法吗?提前谢谢。
以文本形式读取,在<br>
上拆分,然后解析为CSV:
txt <- strsplit(readLines("https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM/csv"), "<br>")[[1]]
txt[1:2]
# [1] "Mes/Año,"Índice de precios Lima Metropolitana (índice 2009 = 100) - IPC Sin Alimentos""
# [2] ""Mar.2019","127.150411989837""
out <- read.csv(text = txt)
str(out)
# 'data.frame': 25 obs. of 2 variables:
# $ Mes.A.ntilde.o : chr "Mar.2019" "Abr.2019" "May.2019" "Jun.2019" ...
# $ X.Iacute.ndice.de.precios.Lima.Metropolitana...iacute.ndice.2009...100....IPC.Sin.Alimentos: num 127 127 127 128 128 ...
(不是最好的列名,但……这是一个开始。(
(您可能想向管理员建议,他们可能无法正确理解浏览器窗口中可查看的类似CSV的文本与实际CSV数据之间的区别。(
如果你想把它读成CSV,请使用r2evans答案。然而,Perú中央银行的API与其他格式相比相当强大。我建议将它们的HTML表保存为XLS(即"MS Excel"(和JSON格式。
html表格,XLS文件类型:
library(rvest)
xls_url <- "https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM/xls"
table_xls <- html_table(read_html(xls_url))
table_xls
IPC Sin Alimentos
1 Mar.2019 127.1504
2 Abr.2019 127.2806
3 May.2019 127.4804
4 Jun.2019 127.5056
...
json与嵌套表
library(jsonlite)
json_url <- "https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM/json"
json_object <- fromJSON(txt = json_url)
table_json <- json_object$periods
table_json
name values
1 Mar.2019 127.150411989837
2 Abr.2019 127.280597562152
3 May.2019 127.480400572476
...