r语言 - 删除 3D 阵列中的 NA 并重塑形状



我有一个数组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

> 将 na.omitapply 一起使用,并使用 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)

最新更新