Логические операторы: И действующие по вкусу ИЛИ

Lloyd Christmas спросил: 13 октября 2017 в 06:26 в: r

Мне трудно понять, как R обрабатывает операторы AND и OR, когда я использую filter из dplyr.

Вот пример для иллюстрации:

library(dplyr)
xy <- data.frame(x=1:6, y=c("a", "b"), z= c(rep("d",3), rep("g",3)))> xy
  x y z
1 1 a d
2 2 b d
3 3 a d
4 4 b g
5 5 a g
6 6 b g

Использование filter Я хочу исключить все строки, где x==1 и z==d. Это заставит меня поверить, что я хочу использовать оператор AND: &

> filter(xy, x != 1 & z != "d")
  x y z
1 4 b g
2 5 a g
3 6 b g

Но при этом удаляются все строки с x==1 или z==d. Что еще более странно, так это то, что когда я использую оператор OR, | я получаю желаемый результат:

> filter(xy, x != 1 | z != "d")
  x y z
1 2 b d
2 3 a d
3 4 b g
4 5 a g
5 6 b g

Кроме того, это работает, но не так, как хотелось бы. если бы я связывал вместе == и != в одной и той же условной оценке.

> filter(xy, !(x == 1 & z == "d"))
  x y z
1 2 b d
2 3 a d
3 4 b g
4 5 a g
5 6 b g

Может кто-нибудь объяснить, что мне не хватает?


0 ответов