【问题标题】:Create new matrix in R by summing rows of another matrix通过对另一个矩阵的行求和来在 R 中创建新矩阵
【发布时间】:2017-11-27 15:33:59
【问题描述】:

所以我有以下矩阵(我们称之为输出):

> output

     [,1] [,2] [,3] [,4] [,5] [,6] 
[1,]   1    1    1    0    0    1
[2,]   1    1    1    0    0    1
[3,]   1    1    1    0    0    1
[4,]   0    0    0    0    0    0
[5,]   1    0    1    1    0    0 
[6,]   1    0    1    1    0    0

我想要做的是通过以两个为一组添加行来创建一个新矩阵(输出 2)。例如,新矩阵的第一行是:

output2[1,] <- output[1,] + output[2,]

新矩阵 output2 的第二行将由旧输出矩阵的第三行和第四行之和组成:

output2[2,] <- output[3,] + output[4,]

等等。我想知道什么是最好的编码方式,考虑到我需要对更大的矩阵做同样的事情。我正在考虑使用 seq() 函数和 for 循环创建虚拟变量。

有没有更简单的方法?

编辑:

输入(输出)

结构(c(1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0), .Dim = c(10L, 19L))

【问题讨论】:

  • 请发帖dput(yourMatrix)

标签: r matrix


【解决方案1】:

如果m 是你的矩阵,试试这个:

m[seq(1,by=2,to=nrow(m)),]+m[seq(2,by=2,to=nrow(m)),]

【讨论】:

  • 是的,我认为这符合我的想法!非常感谢!
【解决方案2】:

另一种选择是使用矢量回收:

matrix(output[c(TRUE, FALSE)] + output[c(FALSE, TRUE)], ncol = ncol(output))

【讨论】:

  • 这个解决方案也适用于我。感谢您的帮助!
【解决方案3】:

这两个:

  • 处理偶数行和奇数行
  • 通过将 2 替换为 k 来推广到 k 行
  • 很短——一行代码或者很容易变成一行
  • (1) 仅使用基本函数,即没有包,并且 (2) 可以很容易地推广到 sum 以外的函数。

1) rowsumrowsumc(1, 1, 2, 2, ..., 5, 5) 的第二个参数一起使用,该参数很容易使用gl 创建:

nr <- nrow(output)
rowsum(output, gl(nr, 2, nr))

2) rollapply 另一种可能性是使用 zoo 的 rollapply。如果我们知道行数是偶数,我们可以选择省略 align 和 partial 参数。

library(zoo)
rollapply(output, 2, by = 2, sum, align = "left", partial = TRUE)

【讨论】:

  • 两者都工作正常!但是 rollapply() 似乎有点慢。感谢您的宝贵时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2019-05-04
  • 1970-01-01
相关资源
最近更新 更多