如何从三维数组按条件返回对应值及来源索引(输出指定形状)
解决方法
我来帮你搞定这个R语言的需求,咱们一步步来实现:
首先先把你的三维数组定义好:
arr <- array(data = c(0.1, 0.52, 0.3, 0.4, 0.15, 0.2, 0.7, 0.8), dim = c(2, 2, 2))
先把三维数组里的两个二维切片单独提取出来,方便后续操作:
mat1 <- arr[,,1] # 第一个2×2矩阵 mat2 <- arr[,,2] # 第二个2×2矩阵
1. 生成值结果矩阵res1
咱们用嵌套的ifelse()函数来实现你要的判断逻辑:先检查第一个矩阵的元素是否大于0.5,满足的话就取这个值;如果不满足,再检查第二个矩阵的对应元素是否大于0.5,满足就取第二个矩阵的值;要是两个都不大于0.5,就返回NA。代码如下:
res1 <- ifelse(mat1 > 0.5, mat1, ifelse(mat2 > 0.5, mat2, NA))
运行后得到的res1完全符合你的预期:
[,1] [,2] [1,] NA 0.7 [2,] 0.52 0.8
2. 生成来源索引矩阵res2
逻辑和res1一致,只是把返回值换成来源的索引(1表示来自第一个切片,2表示来自第二个切片):
res2 <- ifelse(mat1 > 0.5, 1, ifelse(mat2 > 0.5, 2, NA))
这里要提一句:你给出的期望res2里,[1,2]写的是1,但实际上0.7是来自第二个切片(arr[,,2][1,2]),所以正确的res2结果应该是:
[,1] [,2] [1,] NA 2 [2,] 1 2
如果之后有特殊情况需要调整规则(比如两个位置的元素都大于0.5时的处理逻辑),随时修改嵌套的判断条件就可以啦~
内容的提问来源于stack exchange,提问作者Tpellirn
相关产品推荐
相关产品推荐

