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

如何在R中使用reshape函数将重复列的宽格式表格转为长格式?

用reshape函数转换重复列的宽表为长格式

首先,你的原始数据在R中会自动为重复列名添加后缀(比如Region.1、A.1),先构造对应的示例数据框:

df5 <- data.frame(
  Region = c("SS", "SS"),
  A = c(45, 22),
  B = c(98, NA),
  C = c(89, 77),
  Region.1 = c("KK", "KK"),
  A.1 = c(87, 45),
  B.1 = c(NA, 78),
  C.1 = c(25, 88),
  Region.2 = c("MM", "MM"),
  A.2 = c(88, NA),
  B.2 = c(NA, 72),
  C.2 = c(59, 35)
)

接下来使用reshape函数完成转换,核心是通过varying参数指定重复列的分组对应关系:

# 转换为长格式
long_df <- reshape(
  df5,
  idvar = "id",          # 用行号作为原始行的唯一标识
  timevar = "group",     # 新增分组变量标记不同的重复列组
  varying = list(
    c("Region", "Region.1", "Region.2"),  # 所有Region相关列
    c("A", "A.1", "A.2"),                  # 所有A相关列
    c("B", "B.1", "B.2"),                  # 所有B相关列
    c("C", "C.1", "C.2")                   # 所有C相关列
  ),
  v.names = c("Region", "A", "B", "C"),    # 转换后的列名
  direction = "long"                       # 指定转换方向为长格式
)

# 清理多余列并重置行名
long_df <- long_df[, c("Region", "A", "B", "C")]
rownames(long_df) <- NULL

运行后得到的long_df就是你需要的格式:

> long_df
  Region  A  B  C
1     SS 45 98 89
2     SS 22 NA 77
3     KK 87 NA 25
4     KK 45 78 88
5     MM 88 NA 59
6     MM NA 72 35

参数说明

  • idvar:确保原始每行的多组数据能被正确拆分,这里用行号作为唯一标识
  • varying:按变量名分组列出所有重复列,告诉函数哪些列属于同一变量的不同组
  • v.names:定义转换后保留的列名
  • direction="long":明确要从宽格式转换为长格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:40:29