Удалить строки с определенным столбцом NA - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть следующий набор данных, в котором некоторые записи (уникальные A) не имеют данных в B и других, которые иногда имеют.

A B
1 NA
2 NA
3 77
1 NA
2 81

Я хочу удалить записи, которые Всегда имеют NA а остальное оставь

A B
2 NA
3 77
2 81

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Мы можем использовать ave, сгруппированные по A и удалить группы, которые имеют all NA s

df[!with(df, ave(is.na(B), A, FUN = all)), ]

#  A  B
#2 2 NA
#3 3 77
#5 2 81

Используя ту же логику с dplyr

library(dplyr)
df %>%
   group_by(A) %>%
   filter(!all(is.na(B)))
0 голосов
/ 12 декабря 2018

Мы можем использовать data.table

library(data.table)
setDT(df1)[, .SD[any(!is.na(B))], A]
#    A  B
#1: 2 NA
#2: 2 81
#3: 3 77

данные

df1 <- structure(list(A = c(1L, 2L, 3L, 1L, 2L), B = c(NA, NA, 77L, 
  NA, 81L)), class = "data.frame", row.names = c(NA, -5L))
0 голосов
/ 12 декабря 2018

Если предположить, что ввод, воспроизводимый в примечании в конце, для каждой группы, определенной как A, мы возвращаем ИСТИНА, если какой-либо из ее элементов в B не NA.

subset(DF, ave(!is.na(B), A, FUN = any))

Примечание

Lines <- "
A B
1 NA
2 NA
3 77
1 NA
2 81"
DF <- read.table(text = Lines, header = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...