Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 移除3D阵列中的NA并重塑形状_Arrays_R_Na - Fatal编程技术网

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 do
any(应用(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)