Найти несоответствие местоположения по двум векторам, включая NA - PullRequest
4 голосов
/ 18 февраля 2020

Мне довольно неловко задавать этот вопрос. Опытный пользователь R определенно должен это знать, но здесь идет речь:

Мне нужно найти местоположение несоответствий между двумя предположительно идентичными векторами. В этом случае очень важно, чтобы NA считались несоответствиями.

Пример данных

> x <- c(1, NA, NA, NA, 5); x
[1]  1 NA NA NA  5
> y <- c(1, NA, NA, 4, 5); y
[1]  1 NA NA  4  5

Что я хочу получить

Для меня не имеет значения, если я получу логический вектор или вектор чисел c с местоположениями несоответствия:

> c(F, T, T, T, F)
[1] FALSE  TRUE  TRUE  TRUE FALSE
> 2:4
[1] 2 3 4

То, что я пробовал:

> which(x != y)
integer(0)
> setdiff(x, y)
numeric(0)
> !(x %in% y)
[1] FALSE FALSE FALSE FALSE FALSE

1 Ответ

7 голосов
/ 18 февраля 2020

Вы можете использовать:

x != y | is.na(x & y)
#Or checking NA individually
#x != y | is.na(x) | is.na(y)
#[1] FALSE  TRUE  TRUE  TRUE FALSE

Вы можете легко обернуть which вокруг этого, чтобы получить число c вектор

which(x != y | is.na(x & y))
#[1] 2 3 4
...