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

如何将DataFrame中各ID的年度数据从行转换为列?

长格式DataFrame转宽格式(按年份拆分列)

你的需求是把长格式的DataFrame重塑为宽格式,将年份作为列、同一ID保留在同一行,缺失年份自动填充NA,以下是两种R语言中常用的实现方法:

方法1:使用tidyr包的pivot_wider(推荐,tidyverse生态)

首先确保安装并加载tidyr包,先将overlap_95列从字符型转换为数值型(原数据是字符格式,后续分析更方便),再执行宽表转换:

# 安装包(首次使用时运行)
install.packages("tidyr")

# 加载包
library(tidyr)

# 先转换overlap_95为数值型
df$overlap_95 <- as.numeric(df$overlap_95)

# 转宽格式
wide_df <- pivot_wider(df, 
                       id_cols = WLH_ID, 
                       names_from = year, 
                       values_from = overlap_95)

运行后wide_df的结果就是你要的格式:

  • 每行对应一个WLH_ID
  • 列名是各个年份
  • 没有数据的年份自动填充NA

方法2:使用reshape2包的dcast

如果你习惯使用reshape2包,也可以用dcast函数实现:

# 安装包(首次使用时运行)
install.packages("reshape2")

# 加载包
library(reshape2)

# 转换数据类型并转宽格式
df$overlap_95 <- as.numeric(df$overlap_95)
wide_df <- dcast(df, WLH_ID ~ year, value.var = "overlap_95")

这个方法的输出和第一种完全一致,缺失值同样会用NA填充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:57:11