首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从数组中返回一个带条件的值,与输入数组的形状相同?

如何从数组中返回一个带条件的值,与输入数组的形状相同?
EN

Stack Overflow用户
提问于 2019-02-27 18:16:31
回答 1查看 74关注 0票数 1

我有这个数组:

代码语言:javascript
复制
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)) 


  > arr
         , , 1

             [,1] [,2]
        [1,] 0.10  0.3
        [2,] 0.52  0.4

       , , 2

            [,1] [,2]
       [1,] 0.15  0.7
       [2,] 0.20  0.8

我想测试在arr,,1和,,2的对应值中是否有大于0.5的值,所以如果没有返回NA,则返回它。应用到0.10;0.15 (在这种情况下返回NA,因为它们都不大于0.5),然后转到0.3;0.7 (返回0.7,因为它是大于0.5的元素),等等

我想要的输出1矩阵2*2:

代码语言:javascript
复制
 res1= #resturn the value
       [,1] [,2]
[1,]    NA    0.7
[2,]    0.52    0.8  

和另一个矩阵2*2来显示索引res2=返回该值的索引

代码语言:javascript
复制
     [,1] [,2]
[1,]    NA   1
[2,]    1    2

1表示0.7来自第一个矩阵arr,,1

2表示0.8来自第二个矩阵arr,,2等

EN

回答 1

Stack Overflow用户

发布于 2019-02-27 18:31:46

EDIT::这是一个过于复杂的解决方案:

代码语言:javascript
复制
df2<-as.data.frame(arr)
df3<-as.data.frame(apply(df2,2,function(x)ifelse(x>0.5,x,NA)))
mat<-as.matrix(df3[,purrr::map_lgl(df3,~sum(is.na(.x))<=1)])
row(mat)

结果:

代码语言:javascript
复制
> mat
       V1  V4
[1,]   NA 0.7
[2,] 0.52 0.8
> row(mat)
     [,1] [,2]
[1,]    1    1
[2,]    2    2

原始

我们可以使用plyr

代码语言:javascript
复制
plyr::aaply(arr,c(1,2),function(x) ifelse(x>0.5,x,NA))

结果:

代码语言:javascript
复制
, ,  = 1

   X2
X1     1  2
  1   NA NA
  2 0.52 NA

, ,  = 2

   X2
X1   1   2
  1 NA 0.7
  2 NA 0.8
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54903063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档