如果 NA 存在则省略整个列表
Omitting the whole list if NA present
假设我有一个列表列表:
d <- list(matrix(c(1:6),nrow=3,ncol=2),matrix(c(7:12),nrow=3,ncol=2))
e <- list(matrix(c(1:6),nrow=3,ncol=2),matrix(c(7:9,NA,NA,12),nrow=3,ncol=2))
f <- list(d,e)
rapply(f, na.omit, how = "replace")
当我使用此 rapply
函数时,它只会删除其中包含 NA
的行。如果在那里找到任何 NA
,我希望删除整个列表。我的意思是,既然列表 e
中有 NA
,那么我希望列表 e
完全从列表 f
中消失。我该怎么做?
PS。我正在使用的真实数据与我在此处复制的数据略有不同。这是一个包含 550 多个列表的长列表,每个列表都是 8 x 6
个数据帧。这是它的外观快照。我不确定我在这里复制的答案是否与我的真实数据相同,但让我们试一试! (在真实数据中,部分Bid Yield值是NA
的)
PS2。如果您认为答案不同,我可以通过 google 驱动器共享数据。
任何帮助将不胜感激!
您可以使用 Filter
:
Filter(function(x) all(!is.na(unlist(x))), f)
[[1]]
#[[1]][[1]]
# [,1] [,2]
#[1,] 1 4
#[2,] 2 5
#[3,] 3 6
#[[1]][[2]]
# [,1] [,2]
#[1,] 7 10
#[2,] 8 11
#[3,] 9 12
这是使用应用函数的基础 R 方法:
ind <- sapply(f, function(x) sum(sapply(x, function(y) sum(is.na(y)))) == 0)
f[ind]
[[1]]
[[1]][[1]]
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
[[1]][[2]]
[,1] [,2]
[1,] 7 10
[2,] 8 11
[3,] 9 12
请注意,e
矩阵列表已完全删除,因为该列表的其中一个矩阵中有一个 NA
值。
数据:
d <- list(matrix(c(1:6),nrow=3,ncol=2), matrix(c(7:12), nrow=3, ncol=2))
e <- list(matrix(c(1:6),nrow=3,ncol=2), matrix(c(7:9,NA,NA,12), nrow=3, ncol=2))
f <- list(d, e)
假设我有一个列表列表:
d <- list(matrix(c(1:6),nrow=3,ncol=2),matrix(c(7:12),nrow=3,ncol=2))
e <- list(matrix(c(1:6),nrow=3,ncol=2),matrix(c(7:9,NA,NA,12),nrow=3,ncol=2))
f <- list(d,e)
rapply(f, na.omit, how = "replace")
当我使用此 rapply
函数时,它只会删除其中包含 NA
的行。如果在那里找到任何 NA
,我希望删除整个列表。我的意思是,既然列表 e
中有 NA
,那么我希望列表 e
完全从列表 f
中消失。我该怎么做?
PS。我正在使用的真实数据与我在此处复制的数据略有不同。这是一个包含 550 多个列表的长列表,每个列表都是 8 x 6
个数据帧。这是它的外观快照。我不确定我在这里复制的答案是否与我的真实数据相同,但让我们试一试! (在真实数据中,部分Bid Yield值是NA
的)
PS2。如果您认为答案不同,我可以通过 google 驱动器共享数据。
任何帮助将不胜感激!
您可以使用 Filter
:
Filter(function(x) all(!is.na(unlist(x))), f)
[[1]]
#[[1]][[1]]
# [,1] [,2]
#[1,] 1 4
#[2,] 2 5
#[3,] 3 6
#[[1]][[2]]
# [,1] [,2]
#[1,] 7 10
#[2,] 8 11
#[3,] 9 12
这是使用应用函数的基础 R 方法:
ind <- sapply(f, function(x) sum(sapply(x, function(y) sum(is.na(y)))) == 0)
f[ind]
[[1]]
[[1]][[1]]
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
[[1]][[2]]
[,1] [,2]
[1,] 7 10
[2,] 8 11
[3,] 9 12
请注意,e
矩阵列表已完全删除,因为该列表的其中一个矩阵中有一个 NA
值。
数据:
d <- list(matrix(c(1:6),nrow=3,ncol=2), matrix(c(7:12), nrow=3, ncol=2))
e <- list(matrix(c(1:6),nrow=3,ncol=2), matrix(c(7:9,NA,NA,12), nrow=3, ncol=2))
f <- list(d, e)