R使用OECD包下载DIOC_CITIZEN_AGE数据报400错误求解
问题原因
OECD包的get_dataset函数对filter参数有严格格式要求,触发400错误的核心原因有两个:
- 没有匹配
DIOC_CITIZEN_AGE数据集的维度顺序,直接仅传入国家列表不符合接口参数规范 - DIOC数据集为普查节点发布数据,没有连续年度统计结果,你设置的2010-2020时间范围包含了数据集未覆盖的2020年,也会触发请求错误
解决步骤
第一步:先查询目标数据集的维度结构,确认参数顺序
先通过get_data_structure函数查看数据集的维度规则和可选取值:ds_struct <- get_data_structure("DIOC_CITIZEN_AGE") # 查看维度顺序 print(ds_struct$DESCRIPTION) # 查看可用统计年份 print(ds_struct$TIME_PERIOD)DIOC_CITIZEN_AGE的默认维度顺序为:国籍、居住国、年龄、性别、统计年份,filter参数必须按这个顺序传值,不需要筛选的维度填NULL即可。第二步:修正参数后重新请求
以筛选居住国为澳大利亚、爱沙尼亚的所有可用2010、2015年数据为例,修正后的代码如下:library(OECD) library(dplyr) dataset <- "DIOC_CITIZEN_AGE" # filter按维度顺序传值:国籍不筛选、居住国选AUS/EST、年龄不筛选、性别不筛选 dioc_data <- get_dataset( dataset = dataset, filter = list(NULL, c("AUS", "EST"), NULL, NULL), start_time = 2010, end_time = 2015 )第三步:适配旧版本包的兼容调整
如果修改参数后仍返回400错误,添加pre_formatted = TRUE参数适配SDMX接口格式即可:dioc_data <- get_dataset( dataset = dataset, filter = list(NULL, c("AUS", "EST"), NULL, NULL), start_time = 2010, end_time = 2015, pre_formatted = TRUE )
补充说明
DIOC数据库目前仅发布了2000、2005、2010、2015四个普查年份的统计数据,无2020年更新数据,设置时间范围时不要超出上述可用节点。
内容的提问来源于stack exchange,提问作者silent_hunter
相关产品推荐
相关产品推荐

