You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言:将从BLS获取的嵌套列表通胀数据转为data.frame

用blsR包整理BLS通胀数据为指定格式的data.frame

我通过R语言的blsR包从BLS.gov获取美国月度通胀数据,获取到的数据为嵌套列表格式。执行代码如下:

library(blsR)
cpi <- bls_request(query_n_series(c("CUUR0000SA0",         # 所有项目CPI
                                    "CUUR0000SETA02",      # 二手车和卡车CPI
                                    "CUUR0000SAF11211")),  # 肉类CPI
                   api_key = "6b732f6c133d48669aadd2790cb71ccc")
map(cpi, as.data.table)

执行后返回结果如下,其中V1、V2、V3各包含36条记录:

$series
            V1             V2               V3
1: CUUR0000SA0 CUUR0000SETA02 CUUR0000SAF11211
2:  <list[36]>     <list[36]>       <list[36]>

需要将数据整理为如下结构的data.frame:

V                year    period    periodName   value
CUUR0000SA0      2022    M12       December     100
CUUR0000SETA02   2022    M12       December     100.5
CUUR0000SAF11211 2022    M12       December     100.75

解决方案

结合data.table和purrr包可以快速完成数据整理,步骤如下:

  1. 先加载所需辅助包(未安装需先运行install.packages(c("data.table", "purrr"))):
library(data.table)
library(purrr)
  1. 提取系列ID与嵌套数据,逐个处理后合并:
# 提取第一行的系列ID
series_ids <- cpi$series[1, ]
# 提取第二行的嵌套列表数据
series_data_list <- cpi$series[2, ]

# 遍历每个系列,将ID与数据合并并调整格式
processed_data <- map2(names(series_data_list), series_data_list, function(col_id, data) {
  # 将嵌套列表转为data.table
  dt <- rbindlist(data)
  # 添加系列ID列
  dt[, V := series_ids[[col_id]]]
  # 调整列顺序为目标格式
  setcolorder(dt, c("V", "year", "period", "periodName", "value"))
  dt
})

# 合并所有系列的数据为一个data.table
final_df <- rbindlist(processed_data)

# 若需要转为data.frame格式
final_df <- as.data.frame(final_df)

这段代码会展开每个系列的36条记录,添加对应系列ID,最终合并成符合要求的结构化数据。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:15:48