我有这样一个清单:
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)
但我无法弄清楚如何结合这两个步骤..
我们遍历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)
| 归档时间: |
|
| 查看次数: |
301 次 |
| 最近记录: |