R从另一个矩阵的一个矩阵行中减去元素

时间:2014-07-23 14:23:03

标签: r

例如,将这些视为矩阵。

mat1<- matrix(c(1:30),ncol=3)

     [,1] [,2] [,3]
[1,]    1   11   21
[2,]    2   12   22
[3,]    3   13   23
[4,]    4   14   24
[5,]    5   15   25
[6,]    6   16   26
[7,]    7   17   27
[8,]    8   18   28
[9,]    9   19   29
[10,]   10   20   30



mat2 <- matrix(c(5,rep(1,9),5.4,rep(2,9),5.5,rep(3,9)),ncol=3)

    [,1] [,2] [,3]
[1,]    5  5.4  5.5
[2,]    1  2.0  3.0
[3,]    1  2.0  3.0
[4,]    1  2.0  3.0
[5,]    1  2.0  3.0
[6,]    1  2.0  3.0
[7,]    1  2.0  3.0
[8,]    1  2.0  3.0
[9,]    1  2.0  3.0

我尝试从mat2的每一行中减去mat1的第一列,但代码为:

mat1[,1:3]-mat2[1,1:3]

      [,1] [,2] [,3]
 [1,] -4.0  5.6 15.5
 [2,] -3.4  6.5 17.0
 [3,] -2.5  8.0 17.6
 [4,] -1.0  8.6 18.5
 [5,] -0.4  9.5 20.0
 [6,]  0.5 11.0 20.6
 [7,]  2.0 11.6 21.5
 [8,]  2.6 12.5 23.0
 [9,]  3.5 14.0 23.6
[10,]  5.0 14.6 24.5

你真的没有得到那个结果。 我不完全理解这里发生了什么......似乎mat2第一行的元素在减法过程中是交替的?

适用于

matrix(c(mat1[,1]-mat2[1,1],mat1[,2]-mat2[1,2],mat1[,3]-mat2[1,3]),ncol=3)

但是对于我的数据维度,它变得非常混乱。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果您想使用矢量回收,您需要注意矩阵是按列填充的,并且在该方向上进行回收。所以,你需要转置矩阵:

t(t(mat1)-mat2[1,])
#      [,1] [,2] [,3]
# [1,]   -4  5.6 15.5
# [2,]   -3  6.6 16.5
# [3,]   -2  7.6 17.5
# [4,]   -1  8.6 18.5
# [5,]    0  9.6 19.5
# [6,]    1 10.6 20.5
# [7,]    2 11.6 21.5
# [8,]    3 12.6 22.5
# [9,]    4 13.6 23.5
#[10,]    5 14.6 24.5

答案 1 :(得分:1)

或者你可以这样做:

 mat1-mat2[1,col(mat2)]
   #      [,1] [,2] [,3]
   #[1,]   -4  5.6 15.5
   #[2,]   -3  6.6 16.5
   #[3,]   -2  7.6 17.5
   #[4,]   -1  8.6 18.5
   #[5,]    0  9.6 19.5
   #[6,]    1 10.6 20.5
   #[7,]    2 11.6 21.5
   #[8,]    3 12.6 22.5
   #[9,]    4 13.6 23.5
  #[10,]    5 14.6 24.5