我有以下矩陣:在陣列中使用邏輯子陣
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的邏輯數組或其他函數來完成此操作?
我有以下矩陣:在陣列中使用邏輯子陣
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的邏輯數組或其他函數來完成此操作?
假設xx
和ii
總是有除的xx
末維相同的尺寸,那麼這應該做的,由於自行車規則:
xx[ii < 3] <- NA
這裏是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))
謝謝!我認爲這是一個更普遍的解決方案,儘管Psidom對於特定的問題更加優雅。 – user3236841
太好了!這就是我正在尋找的東西,但我想它只能起作用,因爲最後一個索引是重複的索引。 – user3236841
是的。這隻適用於兩個數組在最後一個維度上不同的情況。 – Psidom
我想我只能標記兩個答案中的一個正確,雖然這兩個工作。壞消息! – user3236841