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

R语言按单列融合DataFrame 堆叠相同命名模式的其余列

R语言数据重塑解决方案

方案1:tidyverse 实现(可读性高,易维护)

该方案依赖tidyr包的长宽转换函数,自动适配列名规则,不需要手动指定列位置:

library(tidyverse)

df_reshape <- df %>%
  # 按列名的点分隔符拆分,直接提取后缀为列名
  pivot_longer(cols = -Year,
               names_to = c("prefix", ".value"),
               names_sep = "\\.") %>%
  # 去除不需要的前缀列(A/B/C)
  select(-prefix)

# 验证结果是否和目标一致
identical(df_reshape, df_goal)

方案2:基础R实现(无依赖,处理大数据速度更快)

如果你的数据体量极大,不需要加载第三方包可以用基础R实现,逻辑是批量提取相同后缀的列合并:

# 提取所有后缀名(自动识别x/y/z,无需手动指定)
suffix <- unique(gsub("^.*\\.", "", names(df)[names(df) != "Year"]))
# 提取所有前缀名(自动识别A/B/C分组数量)
prefix <- unique(gsub("\\..*$", "", names(df)[names(df) != "Year"]))

# 批量生成每一列的数值
df_list <- lapply(suffix, function(s) {
  as.vector(t(df[, grepl(paste0("\\.", s, "$"), names(df))]))
})
names(df_list) <- suffix
# 生成Year列
df_list$Year <- rep(df$Year, each = length(prefix))
# 调整列顺序得到最终结果
df_reshape <- as.data.frame(df_list)[, c("Year", suffix)]

# 验证结果是否和目标一致
identical(df_reshape, df_goal)

说明

两种方案都完全适配你的命名规则,无论前缀(A/B/C)和后缀(x/y/z)的数量有多少,都可以自动识别处理,不需要手动调整列索引,适合大规模数据集的自动化处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:06:01