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

如何将R语言矩阵列表转换为指定结构的汇总数据框?

合并矩阵列表为指定格式的数据框

你有一组带维度名称的矩阵组成的列表,示例数据如下:

# 示例数据
m1 <- matrix(c(5, 2, 8, 3, 10, 3), nrow = 2, ncol = 3, dimnames = list(c("Mean", "SD"), c("Apples", "Oranges", "Bananas")))
m2 <- matrix(c(4, 1, 7, 2, 9, 2), nrow = 2, ncol = 3, dimnames = list(c("Mean", "SD"), c("Apples", "Oranges", "Bananas")))
m3 <- matrix(c(6, 3, 9, 4, 11, 4), nrow = 2, ncol = 3, dimnames = list(c("Mean", "SD"), c("Apples", "Oranges", "Bananas")))

# 创建矩阵列表
matrix_list <- list(m1 = m1, m2 = m2, m3 = m3)

需要将其合并为如下结构的数据框:

Apples_Mean Apples_SD Oranges_Mean Oranges_SD Bananas_Mean Bananas_SD
m1            5         2            8          3           10          3
m2            4         1            7          2            9          2
m3            6         3            9          4           11          4

方法一:Base R 原生实现

通过遍历列表转换矩阵格式,再合并结果:

# 遍历列表,转置每个矩阵并转为数据框,重命名列
processed_list <- lapply(matrix_list, function(m) {
  t_m <- t(m)
  df <- as.data.frame(t_m)
  colnames(df) <- paste(rownames(t_m), colnames(df), sep = "_")
  df
})

# 合并所有处理后的单行数据框
result_df <- do.call(rbind, processed_list)

运行后result_df即为目标格式,行名自动保留原列表的命名(m1、m2、m3)。

方法二:Tidyverse 工具链实现

用purrr处理列表,结合dplyr的宽表转换完成格式调整:

library(tidyverse)

result_df <- matrix_list %>%
  # 将每个矩阵转置后转为 tibble,保留分组和水果名称
  map_dfr(~ as_tibble(t(.x), rownames = "Fruit"), .id = "Group") %>%
  # 将 Mean/SD 转为列,拼接水果名和统计量作为列名
  pivot_wider(names_from = Fruit, values_from = c(Mean, SD), names_sep = "_") %>%
  # 将分组列转为行名
  column_to_rownames("Group")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:37:52