Как удалить столбцы с dplyr с NA в конкретной строке? - PullRequest
0 голосов
/ 09 июня 2018

Этот код удаляет все столбцы, которые содержат хотя бы один 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 голосов
/ 09 июня 2018

Другой вариант: 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)
0 голосов
/ 09 июня 2018

В 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
0 голосов
/ 09 июня 2018

Вы можете сделать это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...