解析从URL读取的文本文件失败

时间:2014-03-14 21:59:24

标签: r parsing

这应该很简单 - 我在Knitr中运行定期报告,在那里我获取实时数据以供进一步处理。然而,由于我不清楚的原因,我的其中一条线已停止运作;因此这个问题。

fed_data<-getURL('http://www.federalreserve.gov/datadownload/Output.aspx?rel=H15&series=4c9742f6cd2efded850db98de3f2c75d&lastObs=&from=&to=&filetype=csv&label=include&layout=seriescolumn')

这没有问题。问题在于解析生成的字符串(此处显示返回字符串的开头)

  

SUBSTR(fed_data,1400)       [1]&#34; \&#34;系列说明\&#34;,\&#34;合同率30年,固定比率常规家庭抵押承诺\&#34; \ r \ n \& #34;单位:\&#34; \&#34;百分比\&#34; \ r \ n \&#34;乘数:\&#34; \&#34; 1 \&#34; \ r \ n \&#34;货币:\&#34;,\&#34; NA \&#34; \ r \ n \&#34;唯一标识符:\&#34;,\&#34 ; H15 / H15 / RMMPCCFC_N.M \&#34; \ r \ n \&#34;时间段\&#34;,\&#34; RMMPCCFC_N.M \&#34; \ r \ n1971-04, 7.31 \ r \ n1971-05,7.43 \ r \ n1971-06,7.53 \ r \ n1971-07,7.60 \ r \ n1971-08,7.70 \ r \ n1971-09,7.69 \ r \ n1971-10,7.63 \ r \ n1971-11,7.55 \ r \ n1971-12,7.48 \ r \ n1972-01,7.44 \ r \ n1972-02,7.33 \ r \ n1972-03,7.30 \ r \ n&#34;

然后我尝试解析,跳过前六行(假设回车被正确识别):

interest <- scan(fed_data,skip=6, allowEscapes = T, quote="\"", sep=",")

结果输出:

> interest <- scan(fed_data,skip=6, allowEscapes = T,quote="\"", sep=",")
Error in file(file, "r") : cannot open the connection
In addition: Warning message:
In file(file, "r") :
  cannot open file '"Series Description","CONTRACT RATE ON 30-YEAR, FIXED-RATE CONVENTIONAL HOME MORTGAGE COMMITMENTS"
"Unit:","Percent"
"Multiplier:","1"
"Currency:","NA"
"Unique Identifier: ","H15/H15/RMMPCCFC_N.M"
"Time Period","RMMPCCFC_N.M"
1971-04,7.31
1971-05,7.43
1971-06,7.53

关于为什么没有正确解析这个问题的任何想法?

2 个答案:

答案 0 :(得分:1)

你不能使用吗?

url='http://www.federalreserve.gov/datadownload/Output.aspx?rel=H15&series=4c9742f6cd2efded850db98de3f2c75d&lastObs=&from=&to=&filetype=csv&label=include&layout=seriescolumn'
df <- read.csv(url,skip=5)
head(df)
#   Time.Period RMMPCCFC_N.M
# 1     1971-04         7.31
# 2     1971-05         7.43
# 3     1971-06         7.53
# 4     1971-07         7.60
# 5     1971-08         7.70
# 6     1971-09         7.69

scan(...)的问题是第一个参数被解释为文件名。您可以使用

解决此问题
scan(textConnection(fed_data),...)

但它仍未正确解析。 read.csv(...)就是为此而建的。

您也可以使用

更简单地完成此操作
library(quantmod)
getSymbols("MORTG",src="FRED")
head(MORTG)
#            MORTG
# 1971-04-01  7.31
# 1971-05-01  7.43
# 1971-06-01  7.53
# 1971-07-01  7.60
# 1971-08-01  7.70
# 1971-09-01  7.69

答案 1 :(得分:1)

scan帮助文件(在示例上方)显示read.table更加用户友好&#34;读取数据矩阵的方法(以及多个文件的readLines)。这可以通过

来完成
> url <- 'http://www.federalreserve.gov/datadownload/Output.aspx?rel=H15&series=4c9742f6cd2efded850db98de3f2c75d&lastObs=&from=&to=&filetype=csv&label=include&layout=seriescolumn'
> f <- read.table(url, skip = 6, sep = ",")
> head(f)
       V1   V2
1 1971-04 7.31
2 1971-05 7.43
3 1971-06 7.53
4 1971-07 7.60
5 1971-08 7.70
6 1971-09 7.69

要获取列标题,请调整skip并添加header = TRUE

read.table(url, skip = 5, sep = ",", header = TRUE)