r - 使用每个查询限制的结果运行 BLS API 大型数据帧并在 R 中另存为数据帧
问题描述
我正在尝试使用 BLS API 提取大量数据(约 50 万个单独的系列 ID)并将输出存储为数据帧。
我遇到了两个问题:
- BLS API 每天只允许 50 个结果/查询和 2.5K 查询
- 将输出保存为编译的数据框
我创建了一个只有一列“系列 ID”的数据框,这是 BLS API 吐出该特定 ID 上的数据所需的信息。为了绕过结果/查询限制,我尝试将所有 500K 系列 ID 的数据框分成 250 个组(以保持在每天的查询限制之下),并使用一个函数分别在每个组中运行 bls_api 代码。我相信这可能有效,但我无法看到输出。为了尝试将输出保存在数据帧中,我创建了一个空白数据帧并尝试将 BLS 数据函数输出与空白数据帧进行 rbind。
创建一个空白数据框以将 BLS 输出存储在
output <- data.frame();
在 250 行系列 ID 的段上运行 BLS API 代码
unlist(lapply(split(df$`Series ID`, rep(1:250)),
function(Data)
{bls_data <- bls_api(Data,startyear=2016, endyear= 2019, Sys.getenv("BLS_KEY"));
output <- rbind(output,bls_data)}))
虽然我BLS_API (ie. "REQUEST_SUCCEEDED")
在控制台中看到了输出,但输出并未保存为数据帧“输出”(数据帧仍为空白)。
我是函数新手,所以任何建议都很有价值!
解决方案
这是我能够弄清楚的。不是最优雅的解决方案,但可以完成工作!
定义每组所需的行数
nSegments <- 250
根据上面定义的行数将系列 ID 拆分为段
series_ids_split <- split(df,
(seq(nrow(df))-1) %/% nSegments)
具有明确数据输出的系列 ID 的运行功能
total_output <- lapply(eries_ids_split, function(x){
x <- bls_api(x,startyear = 2018, endyear = 2019, Sys.getenv("BLS_KEY"))
return(x)
})
将数据帧列表合并到输出数据帧中
output_df <- do.call(rbind,total_output)
推荐阅读
- python - 使用 PdfFileReader 时不显示文本
- android - 如何获取每个 StorageVolume 的免费大小和总大小?
- node.js - 如何从 AWS Lambda (Node.JS) 调用 Oracle 存储过程?
- javascript - CountUp.js:没有开始计数
- node.js - 在带有 .desktop 文件的树莓派上启动 node.js 终端应用程序
- powershell - 如何使用 PowerShell 检查文件包含并重命名它?
- css - 比较 2 css 样式 - 属性和值相等
- regex - 查找带有可选前导零但不以其他数字开头的数字
- python - 如何获得 64 位 Anaconda Python 以在 Windows 上找到用于 Cython 的 MS C 编译器?
- html - 如何删除 HTML/CSS 中两个 div 之间的空格?