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

在R语言中实现特定结构数据的行列转置与格式重塑

在R语言中实现数据集的行列转置与格式重塑

原始数据集

先把你提供的表格转换成R可直接处理的数据框:

# 构建原始数据框
original_data <- data.frame(
  Name = c("A", "A", "B", "B"),
  On_Off = c("On", "Off", "On", "Off"),
  July_Inbound = c(5, 6, 4, 8),
  July_Outbound = c(1, 3, 2, 7),
  August_Inbound = c(3, 9, 5, 6),
  August_Outbound = c(4, 2, 7, 1)
)

注:这里把原始表格的列名调整为July_Inbound这类带下划线的格式,方便后续拆分月份和方向信息。

实现步骤(基于tidyverse工具)

首先加载tidyverse包,它包含了用于数据重塑的tidyr和数据处理的dplyr:

library(tidyverse)

步骤1:宽格式转长格式,拆分月份与方向

用pivot_longer把每个月份的入站/出站列整合,同时从列名中提取Month和Direction:

long_data <- original_data %>%
  pivot_longer(
    cols = starts_with(c("July", "August")), # 选中所有月份相关的列
    names_to = c("Month", "Direction"), # 将列名拆分为月份和方向两个变量
    names_sep = "_" # 以下划线为分隔符拆分列名
  )

这一步后,数据会变成每行对应一组Name、On_Off、Month、Direction和对应数值的长格式。

步骤2:长格式转宽格式,生成On/Off列

用pivot_wider把On_Off的两个取值(On/Off)转为单独的列,同时重命名列名匹配目标格式:

final_data <- long_data %>%
  pivot_wider(
    id_cols = c(Month, Direction, Name), # 作为分组依据的列
    names_from = On_Off, # 要转为列的变量
    values_from = value # 对应的值
  ) %>%
  rename(Station = Name) # 将Name重命名为Station

步骤3:调整列顺序(可选,完全匹配目标格式)

final_data <- final_data %>%
  select(Month, Direction, Station, On, Off)

最终结果

运行上述代码后,final_data就是你需要的目标格式,输出如下:

print(final_data)
# # A tibble: 8 × 5
#   Month  Direction Station    On   Off
#   <chr>  <chr>     <chr>   <dbl> <dbl>
# 1 July   Inbound   A           5     6
# 2 July   Outbound  A           1     3
# 3 August Inbound   A           3     9
# 4 August Outbound  A           4     2
# 5 July   Inbound   B           4     8
# 6 July   Outbound  B           2     7
# 7 August Inbound   B           5     6
# 8 August Outbound  B           7     1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:03:23