如何在R中按行列名称求和单元格值并生成矩阵?
在R中按唯一行名列名组合对矩阵单元格求和
步骤1:构造示例数据
先模拟你提供的带重复行名的矩阵:
set.seed(123) # 生成4行3列的矩阵,行名包含重复的Row1 example_mat <- matrix(rnorm(12), nrow = 4, dimnames = list(c("Row1", "Row1", "Row2", "Row3"), c("Col1", "Col2", "Col3"))) print(example_mat)
输出示例:
Col1 Col2 Col3 Row1 -0.5604756 1.2240818 0.4609162 Row1 -0.2301775 0.3598138 -1.2650612 Row2 1.5587083 0.4007715 -0.6868529 Row3 0.0705084 0.1106827 -0.4456620
步骤2:按唯一行名列名组合求和
方法一:Base R 实现
无需额外安装包,用基础R函数即可完成:
# 1. 将矩阵转为数据框,保留行名为单独一列 mat_df <- as.data.frame(example_mat) mat_df$row_name <- rownames(mat_df) # 2. 按行名分组,对每列数值求和 summed_df <- aggregate(. ~ row_name, data = mat_df, sum) # 3. 转换回矩阵格式,设置正确的行名列名 result_matrix <- as.matrix(summed_df[, -1]) rownames(result_matrix) <- summed_df$row_name colnames(result_matrix) <- colnames(example_mat) print(result_matrix)
输出结果:
Col1 Col2 Col3 Row1 -0.7906531 1.5838956 -0.8041450 Row2 1.5587083 0.4007715 -0.6868529 Row3 0.0705084 0.1106827 -0.4456620
方法二:Tidyverse 实现
若习惯用dplyr等工具,代码更简洁:
library(dplyr) library(tibble) result_matrix <- example_mat %>% rownames_to_column("row_name") %>% # 把行名转为数据列 group_by(row_name) %>% # 按行名分组 summarise(across(everything(), sum)) %>% # 每组内所有列求和 column_to_rownames("row_name") %>% # 把分组列转回行名 as.matrix() # 转换为矩阵格式 print(result_matrix)
两种方法最终结果完全一致,重复行名对应的列值会被合并求和,生成唯一行名与列名组合的总和矩阵。
内容的提问来源于stack exchange,提问作者Biswajit Kar
相关产品推荐
相关产品推荐

