【问题标题】:Subtract vector from one column of a matrix从矩阵的一列中减去向量
【发布时间】:2020-07-08 17:45:34
【问题描述】:

我是一个完整的 R 新手,我真的在这个问题上苦苦挣扎。我需要取一个向量evens,然后从矩阵的第一列top_secret 中减去它。我尝试使用top_secret[,1] 仅调用该列并从中减去向量,但它只返回该列。有没有办法在矩阵内部执行此操作,以便我可以继续操作矩阵而无需创建一堆单独的列?

【问题讨论】:

  • 嗨,Hannah,如果您至少提供一个带有dput(top_secret)dput(evens) 的数据样本,帮助会容易得多。如果您的数据确实是绝密,您可以制作具有类似结构的数据。理想情况下,您还将提供预期的输出。请用三个反引号 (```) 将 dput 的输出括起来,以便更好地格式化。请参阅How to make a reproducible example 了解更多信息。
  • 很抱歉。这是我在这里的第一篇文章,我以前从未做过任何 R 工作。我试图在另一条评论中格式化我的代码,但它没有用。我会尝试为我的下一个问题解决这个问题。

标签: r matrix vector


【解决方案1】:

当然可以。这是一个例子:

m <- matrix(c(1,2,3,4),4,4, byrow = TRUE)

> m
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    1    2    3    4
[3,]    1    2    3    4
[4,]    1    2    3    4

m[,4] <- m[,4] - c(5,5,5,5)

给出:

> m
     [,1] [,2] [,3] [,4]
[1,]    1    2    3   -1
[2,]    1    2    3   -1
[3,]    1    2    3   -1
[4,]    1    2    3   -1

【讨论】:

  • 效果很好!!非常感谢。这会扩展到能够一起调整各个行和列吗?就像如果我想从第 3 列的第 18-24 行中减去一个常数,那么我会这样做:``` top_secret[18:24,3]
  • 是的,您可以修改单个元素
  • 嗯,我试图格式化我的代码,但我想我做错了。抱歉,我真的很陌生。
  • 这应该工作:top_secret[18:24,3] &lt;- top_secret[18:24, 3] - 100m[1:2,1] &lt;- m[1:2,1] - 100 在我的例子中
  • @HannahHarder 没问题,我是来帮忙的。如果您喜欢这个答案,请考虑支持或接受。
【解决方案2】:

或者另一个选项是replace

replace(m, cbind(seq_len(nrow(m)), 4), m[,4] - 5)

数据

m <- matrix(c(1,2,3,4),4,4, byrow = TRUE)

【讨论】:

    猜你喜欢
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 2013-12-02
    • 2019-04-17
    • 2014-12-07
    • 1970-01-01
    相关资源
    最近更新 更多