如何在特定行中删除带有NA的dplyr列?

时间:2018-06-09 14:50:57

标签: r dplyr

此代码删除包含至少一个NA的所有列。

library(dplyr)
df %>%
    select_if(~ !any(is.na(.)))

如果我只想删除第八行包含NA的列(对于下面生成的数据),我需要修改什么?

set.seed(1234)
df <- data.frame(A = 1:10, B = 11:20, C = 21:30)
df <- as.data.frame(lapply(df, function(cc) cc[ sample(c(TRUE, NA), prob = c(0.85, 0.15), size = length(cc), replace = TRUE) ]))

3 个答案:

答案 0 :(得分:4)

base-R中,您可以简单地尝试:

df[,which(!is.na(df[8,]))]

@RichScriven建议:

df[, !is.na(df[8,])]

#    A  B
# 1   1 11
# 2   2 12
# 3   3 13
# 4   4 NA
# 5  NA 15
# 6   6 16
# 7   7 17
# 8   8 18
# 9   9 19
# 10 10 20

答案 1 :(得分:3)

你可以这样做:

df %>% 
  select_if(!is.na(.[8,]))

    A  B
1   1 11
2   2 12
3   3 13
4   4 NA
5  NA 15
6   6 16
7   7 17
8   8 18
9   9 19
10 10 20

答案 2 :(得分:3)

另一个选项是keep

library(purrr)
keep(df, ~ !(is.na(.x[8])))
#    A  B
#1   1 11
#2   2 12
#3   3 13
#4   4 NA
#5  NA 15
#6   6 16
#7   7 17
#8   8 18
#9   9 19
#10 10 20

Filter

中的base R
Filter(function(x) !(is.na(x[8])), df)