例如,将这些视为矩阵。
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)
但是对于我的数据维度,它变得非常混乱。
有什么想法吗?
答案 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