使用R中的条件从列表中的每个数据帧中删除行

bee*_*oot 2 r list

我有这样一个清单:

df1 <- data.frame(a=c(NA, NA, 1:10), b=c(NA, 1:11))
df2 <- data.frame(a=1:10, b=c(NA,1:9))
mylist <- list(df1, df2)

> mylist
[[1]]
    a  b
1  NA NA
2  NA  1
3   1  2
4   2  3
5   3  4
6   4  5
7   5  6
8   6  7
9   7  8
10  8  9
11  9 10
12 10 11

[[2]]
    a  b
1   1 NA
2   2  1
3   3  2
4   4  3
5   5  4
6   6  5
7   7  6
8   8  7
9   9  8
10 10  9
Run Code Online (Sandbox Code Playgroud)

我想删除每个数据框中连续超过1个NA的所有行.我怎样才能做到这一点?

我发现了如何删除行

lapply(mylist, `[`, -1,)
Run Code Online (Sandbox Code Playgroud)

以及如何计算NA的总和

NAsums <- function(x) {rowSums(is.na(x))}
lapply(mylist, NAsums)
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何结合这两个步骤..

akr*_*run 6

我们遍历list(lapply),用于rowSums获取每行中NA元素的数量,转换为逻辑向量(<2),并使用它来对行进行子集化.

lapply(mylist, function(x) x[rowSums(is.na(x))<2,])
#[[1]]
#    a  b
#2  NA  1
#3   1  2
#4   2  3
#5   3  4
#6   4  5
#7   5  6
#8   6  7
#9   7  8
#10  8  9
#11  9 10
#12 10 11

#[[2]]
#    a  b
#1   1 NA
#2   2  1
#3   3  2
#4   4  3
#5   5  4
#6   6  5
#7   7  6
#8   8  7
#9   9  8
#10 10  9
Run Code Online (Sandbox Code Playgroud)