2017-05-06 109 views
1

我有以下矩陣:在陣列中使用邏輯子陣

xx <- array(rnorm(120), dim = c(2, 3, 4, 5)) 

ii <- array(sample(1:5, replace = T, size = 24), dim = c(2,3,4)) 

現在,我要讓XX是NA在所有那些II < 3.本應不分第四維的發生條目。有沒有一種簡單的方法可以使用R的邏輯數組或其他函數來完成此操作?

回答

3

假設xxii總是有除的xx末維相同的尺寸,那麼這應該做的,由於自行車規則:

xx[ii < 3] <- NA 
+0

太好了!這就是我正在尋找的東西,但我想它只能起作用,因爲最後一個索引是重複的索引。 – user3236841

+0

是的。這隻適用於兩個數組在最後一個維度上不同的情況。 – Psidom

+0

我想我只能標記兩個答案中的一個正確,雖然這兩個工作。壞消息! – user3236841

2

這裏是apply的方法。基本上,沿着第四維應用邏輯操作。 psidom的答案更有效率,但這種方法更加靈活,您需要循環使用不同的維度。

xxNA <- array(apply(xx, 4, function(x) {is.na(x) <- ii < 3; x}), dim=dim(xx)) 

的邏輯操作,is.na(xx) ii < 3,分配NA到II小於3

檢查了幾個尺寸

xx[,,,1] 
, , 1 

      [,1]  [,2]  [,3] 
[1,] -1.2070657 1.084441 0.4291247 
[2,] 0.2774292 -2.345698 0.5060559 

, , 2 

      [,1]  [,2]  [,3] 
[1,] -0.5747400 -0.5644520 -0.4771927 
[2,] -0.5466319 -0.8900378 -0.9983864 

, , 3 

      [,1]  [,2]  [,3] 
[1,] -0.77625389 0.9594941 -0.5110095 
[2,] 0.06445882 -0.1102855 -0.9111954 

, , 4 

      [,1]  [,2]  [,3] 
[1,] -0.8371717 0.1340882 -0.4405479 
[2,] 2.4158352 -0.4906859 0.4595894 

的變成

xxNA[,,,1] 
, , 1 

      [,1]  [,2]  [,3] 
[1,] -1.207066  NA 0.4291247 
[2,]  NA -2.345698 0.5060559 

, , 2 

      [,1]  [,2]  [,3] 
[1,] -0.5747400 -0.5644520 -0.4771927 
[2,] -0.5466319 -0.8900378 -0.9983864 

, , 3 

    [,1]  [,2] [,3] 
[1,] NA   NA NA 
[2,] NA -0.1102855 NA 

, , 4 

      [,1]  [,2]  [,3] 
[1,] -0.8371717 0.1340882 -0.4405479 
[2,] 2.4158352  NA   NA 

的任何元件ii是

ii 
, , 1 

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

, , 2 

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

, , 3 

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

, , 4 

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

數據

set.seed(1234) 
xx <- array(rnorm(120), dim = c(2, 3, 4, 5)) 

ii <- array(sample(1:5, replace = T, size = 24), dim = c(2,3,4)) 
+0

謝謝!我認爲這是一個更普遍的解決方案,儘管Psidom對於特定的問題更加優雅。 – user3236841