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

在R语言中如何按组将数据框转换为长格式?

将宽格式数据框转换为长格式(合并A/B组)

原始数据

example <- data.frame(
  Partner.A.s.ID = c(1101, 1102),
  Partner.A.s.name = c("X", "A"),
  Partner.B.s.ID = c(2101, 2102),
  Partner.B.s.name = c("Y", "B"),
  Partner.A.s.email = c("XXX", "AAA"),
  Partner.B.s.email = c("YYY", "BBB")
)

方法一:拆分后合并(直观易懂)

分别提取A、B组字段并重命名,再合并两组数据:

# 提取A组数据并重命名列
part_a <- example[, c("Partner.A.s.ID", "Partner.A.s.name", "Partner.A.s.email")]
colnames(part_a) <- c("Partner.ID", "Partner.name", "Partner.email")

# 提取B组数据并重命名列
part_b <- example[, c("Partner.B.s.ID", "Partner.B.s.name", "Partner.B.s.email")]
colnames(part_b) <- c("Partner.ID", "Partner.name", "Partner.email")

# 合并两组数据
example_solution <- rbind(part_a, part_b)

方法二:使用tidyr的pivot_longer(tidyverse风格)

通过正则匹配列名结构,一步转换为长格式:

library(tidyr)

example_solution <- pivot_longer(example,
                                 cols = everything(),
                                 # 正则拆分列名:匹配"Partner.组.s.属性"的结构
                                 names_pattern = "Partner\\.(.*)\\.s\\.(.*)",
                                 # .value对应属性列,另一部分为分组标记
                                 names_to = c("group", ".value")) %>%
  # 重命名属性列并移除分组标记
  rename(Partner.ID = ID, Partner.name = name, Partner.email = email) %>%
  select(-group)

方法三:基础R的reshape函数

用原生函数实现格式转换:

example_solution <- reshape(example,
                            direction = "long",
                            # 指定每组对应的列集合
                            varying = list(c("Partner.A.s.ID", "Partner.B.s.ID"),
                                           c("Partner.A.s.name", "Partner.B.s.name"),
                                           c("Partner.A.s.email", "Partner.B.s.email")),
                            # 设置新列名
                            v.names = c("Partner.ID", "Partner.name", "Partner.email"),
                            # 不保留原行ID和分组标记
                            idvar = NULL,
                            timevar = "group") %>%
  select(-group)

验证结果

最终生成的example_solution与预期一致:

> example_solution
  Partner.ID Partner.name Partner.email
1       1101            X           XXX
2       1102            A           AAA
3       2101            Y           YYY
4       2102            B           BBB

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:17:20