删除具有NA值的特定列

时间:2018-09-26 22:39:31

标签: r dplyr

这是我的数据框:

set.seed(1)
df <- data.frame(A = 1:50, B = 11:60, c = 21:70)
head(df)
df.final <- as.data.frame(lapply(df, function(cc) cc[ sample(c(TRUE, NA), prob = c(0.85, 0.15), size = length(cc), replace = TRUE) ]))

我想删除NA不填充其最后5个值的列。也就是说,仅保留行数从46到50的列。最后5个值具有一个或多个NA的列将被删除。

使用dplyr是否有可能?

有帮助吗?

2 个答案:

答案 0 :(得分:2)

dplyr::select()接受整数列位置。我们可以用它来实现这一目标-

result <- df.final %>% select(., which(!is.na(colSums(tail(., 5)))))
head(result)
   A  B
1  1 11
2  2 NA
3  3 13
4 NA 14
5  5 15
6 NA 16

答案 1 :(得分:2)

Shree击败了我,但它可能派上用场

> df.final %>% tail
    A  B  c
45 45 55 65
46 46 NA 66
47 47 57 67
48 NA 58 68
49 NA 59 69
50 NA 60 NA

> df.final %>%
+     select_if(~ !any(is.na(tail(., n = 1)))) %>%
+     tail()
    B
45 55
46 NA
47 57                                                           
48 58                                                          
49 59                                                            
50 60

只需将上面的n更改为所需的最后一个NA。