如何用R语言reshape()函数实现长表转宽表并合并列
使用R基础包reshape()函数实现自定义列名的长表转宽
需求说明
此前提问被标记为重复但未得到清晰解答:需求并非简单长表转宽,而是要将Gender列(取值为Husband/Wife)与stress、satisfaction列组合生成新列(如Husband_stress),且仅能使用R基础包的reshape()函数,不能使用tidyverse等第三方包。
示例输入数据
set.seed(2023) ID<-c(1,1,2,2,3,3,4,4,5,5) State<-c("NY","NY","NC","NC","TX","TX","VA","VA","SC","SC") Gender<-c("Husband","Wife","Husband","Wife","Husband","Wife","Husband","Wife","Husband","Wife") stress<-rnorm(10,0,1) satisfaction<-rnorm(10,0,1) data<-data.frame(ID,State,Gender,stress,satisfaction)
期望输出结构
ID<-1:5 State<-c("NY","NC","TX","VA","SC") Husband_stress<-rnorm(5,0,1) Wife_stress<-rnorm(5,0,1) Husband_satisfaction<-rnorm(5,0,1) Wife_satisfaction<-rnorm(5,0,1) results<-data.frame(ID,State,Husband_stress,Wife_stress,Husband_satisfaction,Wife_satisfaction)
解决方案
直接使用基础包的reshape()函数,通过指定分组变量、时间变量和转宽方向即可实现需求:
# 执行转宽操作 results <- reshape(data, idvar = c("ID", "State"), # 用于分组的唯一标识变量 timevar = "Gender", # 用于生成列名后缀的变量 direction = "wide") # 指定转宽方向
运行上述代码后,生成的results数据框结构完全符合期望,列名自动生成为Husband_stress、Wife_stress、Husband_satisfaction、Wife_satisfaction的格式,且保留了ID和State作为分组标识。
内容的提问来源于stack exchange,提问作者Tube
相关产品推荐
相关产品推荐

