数组:按行减去

时间:2011-05-31 13:05:41

标签: r

如何减去数组中每行的向量?

a <- array(1:8, dim=c(2,2,2))
a
, , 1

      [,1] [,2]
[1,]    1    3
[2,]    2    4

, , 2

       [,1] [,2]
[1,]    5    7
[2,]    6    8

使用apply给我:

apply(a,c(1,2), '-',c(1,5))
, , 1

      [,1] [,2]
[1,]    0    1
[2,]    0    1

, , 2

      [,1] [,2]
[1,]    2    3
[2,]    2    3

我想要的是:

, , 1

      [,1] [,2]
[1,]    0   -2
[2,]    1   -1

, , 2

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

提前感谢任何提示

4 个答案:

答案 0 :(得分:15)

使用sweep对数组的特定边距进行操作:行是第二维(边距)。

sweep(a,MARGIN=2,c(1,5),FUN="-")

答案 1 :(得分:4)

> library (plyr)
> aaply(a, 1, "-", c(1,5) )
, ,  = 1


X1  1  2
  1 0 -2
  2 1 -1

, ,  = 2


X1  1 2
  1 4 2
  2 5 3

答案 2 :(得分:3)

使用scale从每行中减去平均值或指定的矢量,然后将其除以标准偏差或指定的矢量。

对于你的例子:   scale(a, c(1,5), FALSE)

答案 3 :(得分:1)

> a - rep(c(1,5),each=2)
, , 1

     [,1] [,2]
[1,]    0   -2
[2,]    1   -1

, , 2

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