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

如何在R语言中将长表转宽表并按年份合并压缩行

解决R语言数据框按年月转宽表的问题

嘿,你已经离目标很近啦!问题的核心是pivot_wider默认会把所有非指定列都当作行的唯一标识,而你的数据里还保留着date列,这就导致每一行都被单独的日期区分开,没办法按年份合并。咱们稍微调整一下步骤就能解决:


方法一:先移除多余的date列再转宽表

你已经成功提取了年份和月份,只需要先去掉date列,让pivot_wider知道要按year来分组整合数据:

library(dplyr)
library(tidyr)
library(lubridate)

# 处理日期并移除原date列
df_processed <- df %>%
  mutate(
    year = year(as.Date(date)),
    month = month(as.Date(date), label = TRUE, abbr = TRUE)
  ) %>%
  select(-date)  # 移除date列,消除行的唯一标识

# 转换为目标宽表格式
df_wide <- df_processed %>%
  pivot_wider(names_from = month, values_from = value)

方法二:直接在pivot_wider中指定分组ID

如果你不想删除date列,也可以通过id_cols参数明确告诉函数,只以year作为行的分组依据:

df_wide <- df %>%
  mutate(
    year = year(as.Date(date)),
    month = month(as.Date(date), label = TRUE, abbr = TRUE)
  ) %>%
  pivot_wider(
    id_cols = year,  # 指定仅按year分组
    names_from = month,
    values_from = value
  )

最终效果

执行完上述任意一种方法后,你会得到想要的格式:

# A tibble: 3 × 4
   year   ene   feb   mar
  <dbl> <dbl> <dbl> <dbl>
1  2018   123    12    23
2  2019     3    21     2
3  2020    31    23    32

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:42:32