r - 根据另一个向量的值添加矩阵的列

标签 r matrix

假设我有以下矩阵:

 mat <- matrix(1:20, ncol=5)
      [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

以及以下向量

counts=c(2,1,2)

我需要通过根据该向量计数的每个值添加列来折叠该矩阵。这意味着前两列最多相加,第三列保持相等并对最后两列求和。我的结果矩阵必须是这样的

      [,1] [,2] [,3] 
[1,]    6    9   30
[2,]    8   10   32
[3,]    10  11   34
[4,]    12  12   36

考虑到我有一个非常大的矩阵并且具有不同值的计数向量,我如何以自动方式执行此操作?

最佳答案

一种方法是通过“counts”向量复制“counts”序列,使用它来分割“mat”的列序列以返回一个列表 ,使用 sapply 循环遍历 list,使用列索引对每个 list 元素的“mat”进行子集并获取rowSums

mat2 <- sapply(split(1:ncol(mat), rep(seq_along(counts), counts)), 
           function(i) rowSums(mat[,i,drop=FALSE]))
dimnames(mat2) <- NULL
mat2
#     [,1] [,2] [,3]
#[1,]    6    9   30
#[2,]    8   10   32
#[3,]   10   11   34
#[4,]   12   12   36

关于r - 根据另一个向量的值添加矩阵的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33764871/

相关文章:

r - 在 Shiny 中制作响应式(Reactive)全局变量

R,基于方差截止的滤波器矩阵

matlab - lu( ) 函数如何决定返回什么?

python - 将表表示为矩阵

javascript - 矩阵,距离,javascript

c++ - 使用 C++ 在 R 中乘以复杂矩阵

r - 如何使用 forcats::fct_explicit_na() 替换 data.frame 中的所有 <NA> 值?

r - 使用 purrr :map 将函数应用于 R 中列表的每个元素

excel - 从 Excel 表中提取列并将它们合并到另一个表中

algorithm - 如何在给定两个相对点的二维矩阵中绘制正方形