我有一个多维数组,我想根据第一维中第一个索引的值替换值,在下面的例子中,我想更改对应a1
维度== 2的所有值,如果我只更改一个索引:
set.seed(2)
arr <- array(data=sample(1:2, 18, replace = TRUE), dim=c(3,3,2), dimnames=list(paste0("a",1:3),paste0("b",1:3),paste0("c",1:2)))
# replace second index according to first index of dimension 1
arr[2,,][arr[1,,]==2] <- NA
结果符合预期:
> arr
, , c1
b1 b2 b3
a1 1 2 1
a2 1 NA 1
a3 2 2 1
, , c2
b1 b2 b3
a1 2 2 1
a2 NA NA 2
a3 1 1 2
但如果我尝试像这样更改所有其他索引:
set.seed(2)
arr <- array(data=sample(1:2, 18, replace = TRUE), dim=c(3,3,2), dimnames=list(paste0("a",1:3),paste0("b",1:3),paste0("c",1:2)))
# replace second index according to first index of dimension 1
arr[2:3,,][arr[1,,]==2] <- NA
它并不像我期望的那样工作。数组中的索引很难理解。我该如何正确地做呢?(当然,不用分别改变每个索引)。谢谢。
我希望结果是:
> arr
, , c1
b1 b2 b3
a1 1 2 1
a2 1 NA 1
a3 2 NA 1
, , c2
b1 b2 b3
a1 2 2 1
a2 NA NA 2
a3 NA NA 2
2条答案
按热度按时间cgfeq70w1#
您可以使用
rep
来获取用于子集化的正确索引。或者更一般地说。
或者(感谢@jblood94提供此变体)
或者使用循环。
xesrikrc2#
这将是
或者,更一般地说,根据第一行替换所有行: