фильтр на основе отрицательного утверждения в R dplyr - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь фильтровать по отрицательному утверждению, к которому присоединился оператор &. положительное утверждение дает мне правильные вещи, которые я не хочу, но каким-то образом, когда я добавляю !, чтобы указать отрицательное утверждение (например, !(logic1 & logic2)), оно не возвращается корректно.

вот особенности Я хочу исключить строки с идентификатором, который находится в плохом И помечены как «не хорошо» в столбце tag.

bad <- c(101, 103, 107, 110)

следующий положительный оператор возвращает правильные строки, которые мне не нужны:

df %>%
 filter(ID %in% bad & tag == "no good")

, поэтому я добавил !, чтобы указать отрицательный:

df %>% filter (!(ID %in% bad & tag == "no good"))

каким-то образом это исключило людей с идентификаторами, соответствующими bad, независимо от того, был ли tag «бесполезным». ау, люди с идентификаторами, соответствующими bad, были исключены, даже когда tag было пустым (NA_character_).

что я тут не так делаю?

спасибо!

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

@ Фиби, вы можете получить желаемый результат, используя слегка измененный подход

df %>% filter (!(ID %in% bad) & tag != "no good")

Генерация тестового фрейма данных df

bad <- c(101, 103, 107, 110)
df  <- data.frame(ID=c(101:110),tag = rep(c("good","no good"),5))
> df
    ID     tag
1  101    good
2  102 no good
3  103    good
4  104 no good
5  105    good
6  106 no good
7  107    good
8  108 no good
9  109    good
10 110 no good

Проверка вывод

library(dplyr)
> df %>% filter (!(ID %in% bad) & tag != "no good")
   ID  tag
1 105 good
2 109 good
0 голосов
/ 11 апреля 2020

Мы можем изменить на |

library(dplyr)
df %>% 
     filter (!(ID %in% bad | tag == "no good"))
#    ID  tag
#1 105 good
#2 109 good

данные

bad <- c(101, 103, 107, 110)
df  <- data.frame(ID=c(101:110),tag = rep(c("good","no good"),5))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...