我有一个数组num [1:800, 1:533, 1:3]
。本质上是具有800列,533行和3通道的图像。在每个通道的每一行中,都只有一个NA。
如何删除所有三个通道中的所有NA,并调整数组的形状以减少一列,从而使数组的尺寸为num [1:799, 1:533, 1:3]
?
我尝试了na.omit()
,但是没有用。
示例:
testarray<- array(c(1:27), c(3,3,3))
testarray[1,1,] = NA
testarray[2,2,] = NA
testarray[3,1,] = NA
> testarray
, , 1
[,1] [,2] [,3]
[1,] NA 4 7
[2,] 2 NA 8
[3,] NA 6 9
, , 2
[,1] [,2] [,3]
[1,] NA 13 16
[2,] 11 NA 17
[3,] NA 15 18
, , 3
[,1] [,2] [,3]
[1,] NA 22 25
[2,] 20 NA 26
[3,] NA 24 27
此数组的每一行和每个通道都只有一个NA。 我想删除NA并重塑数组以获取以下输出:
, , 1
[,1] [,2]
[1,] 4 7
[2,] 2 8
[3,] 6 9
, , 2
[,1] [,2]
[1,] 13 16
[2,] 11 17
[3,] 15 18
, , 3
[,1] [,2]
[1,] 22 25
[2,] 20 26
[3,] 24 27
答案 0 :(得分:1)
将na.omit
与apply
一起使用,并与aperm
进行转置。
示例
考虑数组A
。
A
# , , 1
#
# [,1] [,2] [,3]
# [1,] 1 3 NA
# [2,] NA 4 6
#
# , , 2
#
# [,1] [,2] [,3]
# [1,] 1 3 NA
# [2,] NA 4 6
#
# , , 3
#
# [,1] [,2] [,3]
# [1,] 1 NA 5
# [2,] NA 4 6
#
# , , 4
#
# [,1] [,2] [,3]
# [1,] 1 NA 5
# [2,] 2 NA 6
方法
aperm(apply(A, c(1, 3), na.omit), c(2, 1, 3))
# , , 1
#
# [,1] [,2]
# [1,] 1 3
# [2,] 4 6
#
# , , 2
#
# [,1] [,2]
# [1,] 1 3
# [2,] 4 6
#
# , , 3
#
# [,1] [,2]
# [1,] 1 5
# [2,] 4 6
#
# , , 4
#
# [,1] [,2]
# [1,] 1 5
# [2,] 2 6
数据
A <- structure(c(1L, NA, 3L, 4L, NA, 6L, 1L, NA, 3L, 4L, NA, 6L, 1L,
NA, NA, 4L, 5L, 6L, 1L, 2L, NA, NA, 5L, 6L), .Dim = 2:4)