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包可以快速完成数据整理,步骤如下:
- 先加载所需辅助包(未安装需先运行
install.packages(c("data.table", "purrr"))):
library(data.table) library(purrr)
- 提取系列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
相关产品推荐
相关产品推荐

