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

R宽表转长表如何实现按观测交叉排序而非按变量分组排序

解决方案

你可以直接使用tidyverse生态下的pivot_longer()函数完成需求,该函数转换长格式时默认按保留的ID列(也就是你这里的Weekday)优先排序,输出完全符合你要的同一工作日下季度依次排列的效果,示例代码如下:

library(tidyverse)

# 原始宽表数据
df <- data.frame( Weekday = c( "Mon", "Tues", "Wed", "Thurs", "Fri" ),
                  Q1      = c(  9.9 ,  4.9  ,  8.8 ,   12.2 ,  12.2 ),
                  Q2      = c(  5.4 ,  9.7  , 11.1 ,   10.2 ,   8.1 ),
                  Q3      = c(  8.8 ,  7.9  , 10.2 ,   9.2  ,   7.9 ),
                  Q4      = c(  6.9 ,    5  ,  9.3 ,   9.7  ,   5.6 ) ) 

# 转换为长格式
df_long <- df %>%
  pivot_longer(
    cols = -Weekday, # 除Weekday外所有列转换为长值
    names_to = "Quarter",
    values_to = "Delay"
  )

如果你习惯使用reshape2包的melt()函数,也不需要更换工具,仅需在转换后加一步按Weekday排序的操作即可:

library(reshape2)

df_melt <- melt(df, id.vars=c("Weekday"),
           variable.name="Quarter",
           value.name="Delay")

# 按Weekday排序得到目标结果
df_melt_sorted <- df_melt[order(df_melt$Weekday), ]

注意事项

如果需要严格按照周一到周五的自然顺序排列,避免字符串按字母顺序排序导致的错位,可以提前将Weekday列设置为有序因子:

df$Weekday <- factor(df$Weekday, levels = c("Mon", "Tues", "Wed", "Thurs", "Fri"))

内容的提问来源于stack exchange,提问作者user15141497

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:36:04