Arrays 移除3D阵列中的NA并重塑形状
我有一个数组Arrays 移除3D阵列中的NA并重塑形状,arrays,r,na,Arrays,R,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
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。用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
方法
数据
A谢谢你的回答!这似乎对这个例子有效。当我尝试将其用于我的800x533x3图像时,我得到一个错误<代码>默认值中的错误(应用(seam_img,c(1,3),na.omit),c(2,1,3)):“perm”的长度错误3(!=2)
@ViktorG doany(应用(A,c(1,3),函数(x)sum(is.na(x))!=1)
应用于图像生成TRUE
?好的,这表示数组中至少一行有一个na
。你能证实吗?在这种情况下会发生什么?好的,这是个问题。。。这不应该发生。我想我在别的地方犯了个错误。我会接受这个正确的答案。如果出现更多问题,我可以在这里发表评论吗?@ViktorG当然可以,没问题!
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)