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

