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

R语言data.frame列堆叠后为对应列数据分配分组标识的实现方法

R 语言实现宽表转长表并生成列序号分组

示例数据构造

df <- structure(list(a = c("12", "asd", "zxc", "123"), b = c("45", 
"qwe", "curced", "64"), c = c("78", "tyu", "454", "76")), class = "data.frame", row.names = c(NA, -4L))

方法1:使用tidyverse套件实现(代码简洁易读)

library(tidyverse)

result <- df %>%
  # 所有列都转为长表
  pivot_longer(cols = everything(),
               names_to = "group",
               values_to = "value") %>%
  # 把原列名映射为对应列的序号,第一列对应1、第二列对应2以此类推
  mutate(group = match(group, colnames(df))) %>%
  # 按分组排序,符合你要求的堆叠顺序
  arrange(group)

方法2:基础R实现(无需加载额外依赖包)

# 直接堆叠所有列
stack_df <- stack(df)
# 生成列序号分组
stack_df$group <- as.integer(stack_df$ind)
# 调整列顺序、重命名得到最终结果
result <- stack_df[, c("group", "values")]
colnames(result) <- c("group", "value")
# 按分组排序
result <- result[order(result$group), ]

最终输出效果

group  value
1      1     12
2      1    asd
3      1    zxc
4      1    123
5      2     45
6      2    qwe
7      2 curced
8      2     64
9      3     78
10     3    tyu
11     3    454
12     3     76

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:39:03