Как определить, что находится в одном векторе, а не в другом? - PullRequest
72 голосов
/ 03 декабря 2009

В Matlab есть способ найти значения в одном векторе, но не в другом.

например:

x <- c(1,2,3,4)
y <- c(2,3,4)

есть ли функция, которая сообщает мне, что значение в x, которого нет в y, равно 1?

Ответы [ 5 ]

101 голосов
/ 03 декабря 2009

Вы можете использовать функцию setdiff () (установить разницу):

> setdiff(x, y)
[1] 1
52 голосов
/ 03 декабря 2009

Да. Для векторов вы можете просто использовать оператор %in% или is.element().

> x[!(x %in% y)]
1

Для матрицы существует много разных подходов. merge(), вероятно, самый прямой. Я предлагаю посмотреть на этот вопрос для этого сценария .

26 голосов
/ 04 декабря 2009

Файл справки в R для setdiff, union, intersect, setequal и is.element предоставляет информацию о стандартных функциях набора в R.

setdiff(x, y) возвращает элементы x, которых нет в y.

Как отмечено выше, это асимметричная разница. Так, например:

> x <- c(1,2,3,4)
> y <- c(2,3,4,5)
> 
> setdiff(x, y)
[1] 1
> setdiff(y, x)
[1] 5
> union(setdiff(x, y), setdiff(y, x))
[1] 1 5
12 голосов
/ 04 декабря 2009
x[is.na(match(x,y))]
4 голосов
/ 03 июля 2018

setdiff() - сложная функция, потому что вывод зависит от порядка ввода. Вместо этого вы можете написать простую функцию как таковую, которая делает полную противоположность intersect. Это намного лучше.

>difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}

#Now lets test it. 
>x <- c(1,2,3,4)
>y <- c(2,3,4,5)

>difference(x,y)
[1] 1 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...