我有这个数组:
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:
res1= #resturn the value
[,1] [,2]
[1,] NA 0.7
[2,] 0.52 0.8 和另一个矩阵2*2来显示索引res2=返回该值的索引
[,1] [,2]
[1,] NA 1
[2,] 1 21表示0.7来自第一个矩阵arr,,1
2表示0.8来自第二个矩阵arr,,2等
发布于 2019-02-27 18:31:46
EDIT::这是一个过于复杂的解决方案:
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)结果:
> mat
V1 V4
[1,] NA 0.7
[2,] 0.52 0.8
> row(mat)
[,1] [,2]
[1,] 1 1
[2,] 2 2原始
我们可以使用plyr
plyr::aaply(arr,c(1,2),function(x) ifelse(x>0.5,x,NA))结果:
, , = 1
X2
X1 1 2
1 NA NA
2 0.52 NA
, , = 2
X2
X1 1 2
1 NA 0.7
2 NA 0.8https://stackoverflow.com/questions/54903063
复制相似问题