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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:34:57