R子集3d数组并在满足三个条件的情况下修改特定值

时间:2020-06-12 15:00:36

标签: r arrays tidyverse

我正在处理3-d数组,并尝试在满足三个条件时替换特定值,它将处理NA值,并且每次满足条件时都会执行新的评估。我在某处读到,尝试在R中子集多维数组不是一个好主意。我们欢迎任何克服这些问题的意见/建议。最欢迎使用基数R或tidyverse(或任何东西!)的任何解决方案。谢谢。 J

从本质上讲,我试图在满足其他条件的情况下,用0、50%的时间替换第三张“工作表”最后一行中的7。

这是我尝试使用ifelse的尝试,但是失败了,认为它可能需要更复杂的apply语句或其他内容。这是我的MWE:

scanner = new Scanner(System.in);

尽管存在多种可能的解,但是由于随机函数的缘故,一个可能的正确解看起来像是将满足条件的两个7修改为零。

library(abind)
arr1 <- as.array (matrix (c (1, 0, 1, 1, 1, 0, 0, NA, 1, 0, 1, 1,
                             1, 1, NA, 0, 1, 0, 1, 1, 0, 1, 1, 1), ncol = 8))

arr2 <- as.array (matrix (c (7, 5, 9, 1, 8, 4, 2, 3, 0, 8, 7, NA,
                             2, 4, 6, 3, 2, 8, 8, 3, 3, 6, 8, 5), ncol = 8))

arr3 <- as.array (matrix (c (7, 5, 7, 1, 8, 7, 2, 3, 6, 8, 7, 7,
                             2, 4, 5, 3, 2, NA, 8, 3, 4, 6, 8, 7), ncol = 8))

arrtot <- abind (arr1, arr2, arr3, along = 3)

## get the array to be changed
arrtot[dim(arrtot)[1], ,3]

arrtot[dim(arrtot)[1], ,3] <- ifelse(arrtot[dim(arrtot)[1], ,3] == 7 &
                               arrtot[dim(arrtot)[1], ,1] == 1 &
                               arrtot[dim(arrtot)[1], ,2] >= 5,
                               function (x) rbinom(1,1,0.5) * 7,
                               "original value unchanged")

0 个答案:

没有答案