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

如何将Eurostat包导入的数据集从长格式转换为宽格式?

问题原因与解决方案

你的pivot_wider结果不符合预期,核心原因是数据中存在重复的time+geo组合(比如示例数据里2022-12-01的EA19对应两个values值:68.3和-1.9),pivot_wider默认会把这些重复值打包成列表列,而非你预期的单一值列。

针对这个问题,分两种场景处理:

场景1:重复值对应不同统计指标(Eurostat原始数据特性)

Eurostat的sts_inpr_m数据集包含多种工业生产指数指标(比如总指数、环比变化、同比变化等),这些指标由indic_bt字段区分。你之前的代码删掉了这个字段,导致不同指标的数值被混在一起,出现重复的time+geo组合。

解决步骤:

  1. 重新导入数据时保留indic_bt字段:
IPI <- get_eurostat("sts_inpr_m") %>% 
  select("geo", "time", "indic_bt", "values") %>%
  mutate(time=format(as.Date(time, "%Y-%m-%d"))) %>%
  filter(geo %in% c("ES", "IT", "FR", "EU28", "EA19"))
  1. 根据需求选择转宽方式:
  • 方式1:将指标类型和地区合并为列名,同时保留所有指标:
IPI_wide <- IPI %>%
  pivot_wider(names_from = c(indic_bt, geo), values_from = values)
  • 方式2:先筛选特定指标(比如仅保留总指数,需替换为对应indic_bt编码),再转宽:
# 示例:筛选总指数(编码需根据Eurostat实际定义调整)
IPI_total <- IPI %>%
  filter(indic_bt == "PROD_IND_TOTAL") %>%
  pivot_wider(names_from = geo, values_from = values)

场景2:重复值为数据冗余/错误

如果这些重复值是导入或处理时产生的冗余数据,可先对time+geo组合做聚合处理,再转宽:

  • 取平均值:
IPI_wide <- IPI %>%
  group_by(time, geo) %>%
  summarise(values = mean(values, na.rm = TRUE)) %>%
  ungroup() %>%
  pivot_wider(names_from = geo, values_from = values)
  • 保留第一条记录:
IPI_wide <- IPI %>%
  group_by(time, geo) %>%
  slice(1) %>%
  ungroup() %>%
  pivot_wider(names_from = geo, values_from = values)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:24:28