如何用R语言reshape()函数实现长表转宽表(仅用标准评估)
问题描述
现有如下长格式的R数据集:
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)
要求仅用基础R的reshape()函数,将其转换成如下结构的宽格式数据:
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)
解决方案
直接用基础R的reshape()函数就能完成转换,代码如下:
wide_data <- reshape(data, idvar = c("ID", "State"), # 用ID和State作为每组的唯一标识,对应宽格式的一行 timevar = "Gender", # 用Gender的不同取值(Husband/Wife)生成新列名前缀 direction = "wide") # 指定转换方向为宽格式
运行这段代码后,wide_data的结构和目标的results完全匹配,列名会自动生成为Husband_stress、Wife_stress这类符合要求的格式。
内容的提问来源于stack exchange,提问作者Tube
相关产品推荐
相关产品推荐

