Как сказать, что находится в одном векторе, а не в другом?


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

например:

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

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

5 65

5 ответов:

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

> setdiff(x, y)
[1] 1

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

файл справки в R для setdiff, union, intersect, setequal и is.элемент предоставляет информацию о стандартных функциях набора в 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
x[is.na(match(x,y))]

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