在R语言中将多列数据展开为多行的技术实现求助
R语言:将多列数据展开为多行的解决方案
你当前的代码生成了一个宽格式的数据框,其中pro1到pro4属于同类型的重复字段,需要转换为长格式——保留Location和type作为标识列,将pro1-pro4的列名转为分类列,对应的值转为另一列,以匹配目标格式。
原始数据代码
Location<-c(rep("ATL",3),rep("CLE",3),rep("BOS",3)) type<-rep(c("sedan","truck","coupe"),3) pro1<-rep(c("0800 SC","1500 SC","0900 SC"),3) pro2<- rep(c("0800 SC","1500 SC","0900 SC"),3) pro3<-rep(c("1000 SC","1700 SC","1100 SC"),3) pro4<-rep(c("1300 SC","1100 SC","2300 SC"),3) x<-data.frame(Location,type,pro1,pro2,pro3,pro4)
解决方案:使用tidyr::pivot_longer转换格式
tidyr包的pivot_longer函数是处理宽转长格式的标准工具,步骤如下:
# 安装并加载tidyverse包(未安装则执行第一行) # install.packages("tidyverse") library(tidyverse) # 转换为目标长格式 x_long <- x %>% pivot_longer( cols = starts_with("pro"), # 匹配所有以pro开头的列 names_to = "process", # 原列名存入新列process values_to = "schedule" # 原列值存入新列schedule ) # 查看转换结果 print(x_long)
说明
- 转换后的数据框会保留
Location和type的每一组组合,将pro1-pro4的内容拆分为多行,每行对应一个process(如pro1、pro2)和对应的schedule值。 - 若需要调整新列名称,直接修改
names_to和values_to的参数即可(比如把process改成你想要的自定义名称)。
内容的提问来源于stack exchange,提问作者Tierra Smith
相关产品推荐
相关产品推荐

