如何在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
相关产品推荐
相关产品推荐

