从列表中的每个数据框中删除行,条件在R中



我有这样一个列表:

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

我想在每个数据帧的一行中删除所有超过1 NA的行。我该怎么做呢?

我发现如何删除行

lapply(mylist, `[`, -1,)

和如何计算NAs的和

NAsums <- function(x) {rowSums(is.na(x))}
lapply(mylist, NAsums)

但是我不知道如何把这两步结合起来。

我们通过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

最新更新