R语言实现长表转宽表并保留唯一ID:年度收入按年份列展示
R语言长表转宽表:唯一ID行+全年份列填充NA
需求说明
现有包含ID、year、Annual_Income三列的dataframe,因收入数据覆盖2006-2023年导致ID重复,需将长表转换为宽表:每个唯一ID对应一行,2006-2023各年份作为列展示对应收入,缺失年份自动填充NA,避免手动拆分合并的繁琐操作。
示例数据
dataframe2 <- data.frame( ID = c("1", "2", "3", "4", "4", "5", "5", "5", "6", "7"), year = c("2006", "2006", "2007", "2006", "2007", "2006", "2007", "2008", "2010", "2014"), Annual_Income = c("23389", "607002", "45000", "80000", "67000", "140000", "23389", "607002", "45000", "80000") )
解决方案
使用tidyverse工具包中的tidyr::pivot_wider函数,先补全每个ID对应的2006-2023所有年份,再转换为宽表:
# 若未安装tidyverse,先运行install.packages("tidyverse") library(tidyverse) # 1. 将year转为数值型,方便生成连续年份 dataframe2$year <- as.numeric(dataframe2$year) # 2. 为每个ID补全2006-2023的所有年份记录 full_data <- dataframe2 %>% group_by(ID) %>% complete(year = 2006:2023) %>% ungroup() # 3. 转换为宽表,缺失值填充NA wide_data <- full_data %>% pivot_wider( id_cols = ID, names_from = year, values_from = Annual_Income, values_fill = NA ) # 查看最终结果 print(wide_data)
结果说明
转换后的宽表中,每个ID独占一行,2006-2023全年度作为列名,无对应收入数据的位置自动填充NA。若仅需保留示例中出现的年份,可将代码里的year = 2006:2023替换为year = unique(dataframe2$year)。
内容的提问来源于stack exchange,提问作者Diana
相关产品推荐
相关产品推荐

