Когда я фильтрую, чтобы проверить неравенство между двумя столбцами, мне нужно четко указать NA в данных, потому что фильтр сохраняет строки, в которых условие оценивается как TRUE, и NA как бы нарушает эту оценку. Вот что я имею в виду:
Возьмите следующие данные:
df <- data.frame(x = c(1:4,NA,6:10), y = c(1,2,NA,3,6,NA,7,8,9,11))
df
x y
1 1 1
2 2 2
3 3 NA
4 4 3
5 NA 6
6 6 NA
7 7 7
8 8 8
9 9 9
10 10 11
Когда я хочу узнать, какие строки неравны, следующий код не обрезает их:
library(dplyr)
df %>% filter(x != y)
x y
1 4 3
2 10 11
Вместо этого мне нужно четко указать NA:
df %>% filter(x != y | (is.na(x) & !is.na(y)) | (!is.na(x) & is.na(y)))
x y
1 3 NA
2 4 3
3 NA 6
4 6 NA
5 10 11
... но это слишком многословно. Я пробовал с другими методами, такими как базовое подмножество и subset
, но это неудобство сохраняется.
Итак, есть ли более простой способ проверки неравенства с учетом НС ??