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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:10:39