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

如何使用R语言重塑DataFrame:将宽格式转换为长格式

问题描述

现有如下结构的DataFrame:

dateLocation A Variable 1Location A Variable 2Location B Variable 1Location B Variable 2
Jan 202222
Feb 202222
......222
Dec 202222

需要将其转换为以下长格式结构:

dateLocationVariable 1Variable 2Variable...
Jan 20A22.
Jan 20B22.
Feb 20A22.
Feb 20B22.
......22.
Dec 20A22.
Dec 20B22.

核心需求:拆分原表中包含Location和Variable的列名,将Location提取为独立列,各Variable作为单独字段,同时按日期和Location展开行数据。

R语言实现方法

方法1:使用tidyverse包(推荐)

tidyverse的pivot_longer和pivot_wider组合可快速完成格式转换:

步骤1:构造示例数据

library(tidyverse)

# 模拟原数据结构
df <- tibble(
  date = c("Jan 20", "Feb 20", "Dec 20"),
  `Location A Variable 1` = c(2, 2, 2),
  `Location A Variable 2` = c(2, 2, 2),
  `Location B Variable 1` = c(2, 2, 2),
  `Location B Variable 2` = c(2, 2, 2)
)

步骤2:执行格式转换

df_long <- df %>%
  # 将非date列转为长格式,暂存列名和对应值
  pivot_longer(-date, names_to = "col_name", values_to = "value") %>%
  # 拆分列名为Location和Variable两部分
  separate(col_name, into = c("Location", "Variable"), sep = " Variable ", extra = "merge") %>%
  # 移除Location字段中的"Location "前缀
  mutate(Location = str_remove(Location, "Location ")) %>%
  # 将Variable转为列,填充对应值
  pivot_wider(names_from = "Variable", values_from = "value")

方法2:使用data.table包

处理大数据集时,data.table的效率更有优势:

步骤1:构造示例数据

library(data.table)

# 模拟原数据结构
dt <- data.table(
  date = c("Jan 20", "Feb 20", "Dec 20"),
  `Location A Variable 1` = c(2, 2, 2),
  `Location A Variable 2` = c(2, 2, 2),
  `Location B Variable 1` = c(2, 2, 2),
  `Location B Variable 2` = c(2, 2, 2)
)

步骤2:执行格式转换

# 先将宽表转为长表
dt_melted <- melt(dt, id.vars = "date", variable.name = "col_name", value.name = "value")
# 拆分列名为Location和Variable
dt_melted[, c("Location", "Variable") := tstrsplit(col_name, " Variable ", fixed = TRUE)]
# 移除Location字段前缀
dt_melted[, Location := gsub("Location ", "", Location)]
# 将长表转回目标格式
dt_long <- dcast(dt_melted, date + Location ~ Variable, value.var = "value")

两种方法最终都会输出符合需求的长格式数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:01:17