使用blsAPI

时间:2019-01-03 15:41:30

标签: r json api

我正在尝试使用blsAPI提取BLS数据,但一直获取空数据集。当我运行BLS提供的示例代码时,它可以正常工作,但是当我在不同的系列ID上运行相同的代码时,我什么也没得到。我在下面包含了我的代码:

# ENU04013105111150 = Wages
# CXUMENBOYSLB0101M = expenditures

payload<-list('seriesid'=c('ENU04013105111150','CXUMENBOYSLB0101M'),
  'startyear'=1999,'endyear'=2002)
  response<-blsAPI(payload,3)
  json<-fromJSON(response)
  apiDF<-function(data){
  df <- data.frame(year=character(),
                   period=character(),
                   periodName=character(),
                   value=character(),
                   stringsAsFactors=FALSE)

  i <- 0
  for(d in data){
    i <- i + 1
    df[i,] <- unlist(d)
  }
  return(df)
}

wages.df<-apiDF(json$Results$series[[1]]$data)
expend.df<-apiDF(json$Results$series[[2]]$data)

names(wages.df)[4]<-'wages'
names(expend.df)[4]<-'expend'

df<-merge(wages.df, expend.df)
df [1] year       period     periodName wages      expend     <0 rows> (or 0-length row.names)

我正在尝试获取有关工资和支出的数据,然后可以对其进行操纵和绘制。

1 个答案:

答案 0 :(得分:0)

这里似乎发生了几件事。首先,您要向blsAPI函数的api_version参数传递3的值,但是唯一可接受的值为1和2。第二,看来ENU04013105111150系列没有您所要求的年份的数据。这是我跑的:

> library(rjson)
> library(blsAPI)
> 
> payload<-list('seriesid'=c('ENU04013105111150','CXUMENBOYSLB0101M'),
+               'startyear'=1999,'endyear'=2002)
> response<-blsAPI(payload, 2)
> json<-fromJSON(response)
> apiDF<-function(data){
+   df <- data.frame(year=character(),
+                    period=character(),
+                    periodName=character(),
+                    value=character(),
+                    stringsAsFactors=FALSE)
+   
+   i <- 0
+   for(d in data){
+     i <- i + 1
+     df[i,] <- unlist(d)
+   }
+   return(df)
+ }
> 
> json$message
[1] "No Data Available for Series ENU04013105111150 Year: 1999" "No Data Available for Series ENU04013105111150 Year: 2000"
[3] "No Data Available for Series ENU04013105111150 Year: 2001" "No Data Available for Series ENU04013105111150 Year: 2002"
> 
> wages.df<-apiDF(json$Results$series[[1]]$data)
> expend.df<-apiDF(json$Results$series[[2]]$data)
> 
> dim(wages.df)
[1] 0 4
> dim(expend.df)
[1] 4 4

请注意,支出可以正确读取(因为我将api_version更改为2),但是在该时间段内没有其他系列的数据。