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

时间:2015-10-23 11:30:20

标签: r list

我有这样的清单:

public function myDataProvider() {
    $this->createApplication();

    return [
        [ MyController::MAX_FILE_SIZE ]
    ];
}

我希望删除每个数据框中连续超过1个NA的所有行。我怎么能这样做?

我发现了如何删除行

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

以及如何计算NAs的总和

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

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

1 个答案:

答案 0 :(得分:5)

我们遍历listlapply),使用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