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

如何使用spread函数将R中eurostat长格式数据集转为宽格式?

解决长格式转宽格式的问题

问题原因

  • 重复分组键:你的数据中同一个time和geo组合对应多个values(比如DE在time=2018-01-01下有5条记录),spread无法直接将多个值塞进单个单元格,会生成不符合预期的列表列或报错。
  • 列名不匹配:你在select中使用的"UE"、"ZE"在原数据的geo列中不存在,对应的实际值是"EU27_2020"和"EA20",这会导致select找不到列而失败。

解决方案

先对重复的time-geo组合进行聚合(比如取均值、最大值等,根据你的需求选择),再转换为宽格式并重命名列:

步骤1:加载必要包

library(tidyverse)

步骤2:聚合重复数据

这里以计算均值为例,你可以替换为sum()、first()、last()等聚合函数:

taxaatur_EU_m_agg <- taxaatur_EU_m %>%
  group_by(time, geo) %>%
  summarise(values = mean(values), .groups = "drop")

步骤3:转换为宽格式并重命名列

推荐使用pivot_wider(tidyr包的最新函数,替代已退役的spread):

taxaatur_EU_m_wide <- taxaatur_EU_m_agg %>%
  pivot_wider(names_from = geo, values_from = values) %>%
  # 重命名列匹配你的需求
  rename(UE = EU27_2020, ZE = EA20) %>%
  # 按指定顺序选择列
  select(time, UE, ZE, DE, ES, FR, IT)

如果坚持使用spread,代码如下:

taxaatur_EU_m_wide <- taxaatur_EU_m_agg %>%
  spread(geo, values) %>%
  rename(UE = EU27_2020, ZE = EA20) %>%
  select(time, UE, ZE, DE, ES, FR, IT)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 02:10:53