R语言如何提取数据框所有行列组合及拼接名称生成新数据框
R语言实现数据框行列组合转长表
首先提供示例测试数据的构造代码,方便直接复现运行:
# 构造示例数据框 df <- data.frame(a1 = c(4, 2, 6, 9, 13), a2 = c(56, 1, 47, 2, 3), a3 = c(4, 6, 9, 11, 85), a4 = c(6, 15, 4, 12, 3), a5 = c(54, 94, 3, 2, 75)) rownames(df) <- c("a1","a2","a3","a4","a5")
方法1:Base R 无依赖实现
不需要安装加载任何第三方包,直接用R原生函数即可实现,输出顺序完全匹配需求:
result_df <- data.frame( Step = paste0(rep(rownames(df), each = ncol(df)), rep(colnames(df), times = nrow(df))), Value = as.vector(t(as.matrix(df))) )
- 实现逻辑:行名按每个值重复列数的规则生成,列名按整体重复行数的规则生成,二者直接拼接得到Step列;将原数据框转为矩阵后转置再拉平为向量,保证取值顺序为行优先,和Step标识一一对应。
方法2:tidyverse 生态实现
如果日常使用tidyverse流程处理数据,可以用pivot_longer快速完成宽转长操作,代码可读性更强:
library(tidyr) library(tibble) result_df <- df |> rownames_to_column(var = "row_id") |> pivot_longer(cols = -row_id, names_to = "col_id", values_to = "Value") |> mutate(Step = paste0(row_id, col_id), .keep = "unused") |> select(Step, Value)
两种方法输出结果完全一致,均为25行2列的结构,Step列按a1a1、a1a2……a5a5的顺序排列,Value列对应原数据框对应行列位置的数值。
内容的提问来源于stack exchange,提问作者labgeek
相关产品推荐
相关产品推荐

