В Matlab есть способ найти значения в одном векторе, но не в другом.
например:
x <- c(1,2,3,4)
y <- c(2,3,4)
есть ли какая-нибудь функция, которая сообщила бы мне, что значение, x
которое не y
входит, равно 1?
В Matlab есть способ найти значения в одном векторе, но не в другом.
например:
x <- c(1,2,3,4)
y <- c(2,3,4)
есть ли какая-нибудь функция, которая сообщила бы мне, что значение, x
которое не y
входит, равно 1?
Ответы:
Да. Для векторов вы можете просто использовать %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
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
Если:
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
:
union(setdiff(x, y), setdiff(y, x))
Благодаря вкладу Джероми Англима
ИЛИ:
difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}
difference(y,x)
Благодаря вкладу работного дома
setdiff(x,y)
иsetdiff(y,x)
не одно и то же.