我有这样一个列表:
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,)
以及如何计算NA的总和
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
关于使用 R 中的条件从列表中的每个数据框中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33301267/