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
相关产品推荐
相关产品推荐

