Удалить строки с NA во всех столбцах, кроме указанных столбцов - PullRequest
1 голос
/ 09 апреля 2020

Я немного огляделся, но с трудом адаптировал предыдущие ответы к этому делу. У меня есть что-то похожее на следующий фрейм данных:

df <- data.frame("ID1" = c(1, 2, 3, 4), "ID2" = c("a", "b", "c", "d"), "var1" = c(NA, NA, NA, NA), "var2" = c(NA, NA, 2, 3), "var3" = c(NA, 4, 5, 6))

Я хотел бы удалить строки со значениями NA во всех столбцах, кроме первых двух. У меня намного больше переменных, чем просто var1, var2 и var3, и было бы здорово, если бы мне не пришлось их указывать. Вывод должен выглядеть следующим образом:

result <- data.frame("ID1" = c(2, 3, 4), "ID2" = c("b", "c", "d"), "var1" = c(NA, NA, NA), "var2" = c(NA, 2, 3), "var3" = c(4, 5, 6))

Любая помощь очень ценится. Спасибо.

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Один вариант:

df[!rowSums(is.na(df[, 3:ncol(df)])) == (ncol(df) - 2), ]

Или наоборот:

df[rowSums(!is.na(df[, 3:ncol(df)])) > 0, ]

Выход:

  ID1 ID2 var1 var2 var3
2   2   b   NA   NA    4
3   3   c   NA    2    5
4   4   d   NA    3    6

И вариант dplyr с обратным подходом:

library(dplyr)

df %>%
  filter_at(-(1:2), any_vars(!is.na(.)))
0 голосов
/ 09 апреля 2020

Мы можем использовать Reduce в base R

df[!Reduce(`&`, lapply(df[-(1:2)], is.na)),]
#  ID1 ID2 var1 var2 var3
#2   2   b   NA   NA    4
#3   3   c   NA    2    5
#4   4   d   NA    3    6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...