2011-05-31 92 views
8

如何減去數組中每一行的向量?數組:按行減去

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(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 

預先感謝任何提示

回答

15

使用sweep到在某個特定區域運行數組的行距:行是第二個維度(margin)。

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

謝謝,正是我正在尋找 – johannes 2011-05-31 13:28:22

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 
+0

謝謝您的回答,是有沒有辦法去在通過排陣? – johannes 2011-05-31 13:20:17

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 
+0

感謝這個解決方案,也正是我正在尋找以及 – johannes 2011-05-31 14:06:03

3

使用scale減去或者均值或從各行指定的矢量,然後或者通過標準偏差或一個指定的向量劃分它。

對於示例: scale(a, c(1,5), FALSE)