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

