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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:18:13