如何在R中将长格式DataFrame的年份列按ID转为有序宽格式?
R语言实现长格式DataFrame按年份排序转宽格式
先构造一个匹配需求的示例数据,方便验证方法:
library(tidyverse) df <- tibble( ID = c(1,1,2,2,2,3), Thing = c("A","A","B","B","B","C"), Year = c(2020,2022,2019,2021,2023,2020) )
你之前的问题大概率是没做分组内的年份排序与序号生成,核心操作要先按ID分组整理年份顺序,再转宽:
wide_df <- df %>% group_by(ID) %>% arrange(Year, .by_group = TRUE) %>% # 按ID分组后,对年份从小到大排序 mutate(year_col = paste0("Year", row_number())) %>% # 生成Year1、Year2等有序列名 pivot_wider( id_cols = c(ID, Thing), # 保留ID和Thing作为每行唯一标识 names_from = year_col, values_from = Year, values_fill = NA # 年份不足的位置自动填充NA ) %>% ungroup() # 查看转换结果 print(wide_df)
运行后会得到每个ID一行、Thing列保留,年份按从小到大依次对应Year1、Year2等列的宽格式DataFrame,缺失位置自动填充NA。
内容的提问来源于stack exchange,提问作者Frwrd
相关产品推荐
相关产品推荐

