我有以下矩阵:在阵列中使用逻辑子阵
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