В Matlab есть способ найти значения в одном векторе, но не в другом.
например:
x <- c(1,2,3,4)
y <- c(2,3,4)
есть ли какая-нибудь функция, которая сообщила бы мне, что значение, x
которое не y
входит, равно 1?
вы можете использовать функцию setdiff () (установить разницу):
> setdiff(x, y)
[1] 1
setdiff(x,y)
иsetdiff(y,x)
не одно и то же.Да. Для векторов вы можете просто использовать
%in%
оператор илиis.element()
функцию.> x[!(x %in% y)] 1
Для матрицы существует много разных подходов.
merge()
наверное, самый простой. Я предлагаю рассмотреть этот вопрос для этого сценария .источник
Файл справки в R для setdiff, union, correct, 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
источник
источник
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
источник
Если:
x <- c(1,2,3,4) y <- c(2,3,4)
Любое из этих выражений:
setdiff(x, y) x[!(x %in% y)] x[is.na(match(x,y))] x[!(is.element(x,y))]
даст вам правильный ответ
[1] 1
, если цель состоит в том, чтобы найти значения / символыx
, которых нет вy
.Однако применение приведенных выше выражений может быть сложно и может дать нежелательные результаты в зависимости от природы вектора и положения x и y в выражении. Например, если:
x <- c(1,1,2,2,3,4) y <- c(2,3,4)
и цель состоит в том, чтобы просто найти уникальные значения / символы
x
, которых нет,y
или наоборот. Применение любого из этих выражений все равно даст правильный ответ[1] 1
:Благодаря вкладу Джероми Англима
ИЛИ:
difference <- function(x, y) { c(setdiff(x, y), setdiff(y, x)) } difference(y,x)
Благодаря вкладу работного дома
источник