Dans matlab, il existe un moyen de trouver les valeurs dans un vecteur mais pas dans l'autre.
par exemple:
x <- c(1,2,3,4)
y <- c(2,3,4)
y a-t-il une fonction qui me dirait que la valeur x
qui n'est pas dans y
est 1?
vous pouvez utiliser la fonction setdiff () (set difference):
> setdiff(x, y)
[1] 1
setdiff(x,y)
etsetdiff(y,x)
ne sont pas les mêmes.Oui. Pour les vecteurs, vous pouvez simplement utiliser l'
%in%
opérateur ou lais.element()
fonction.> x[!(x %in% y)] 1
Pour une matrice, il existe de nombreuses approches différentes.
merge()
est probablement le plus simple. Je suggère de regarder cette question pour ce scénario .la source
Le fichier d'aide de R pour setdiff, union, intersect, setequal et is.element fournit des informations sur les fonctions d'ensemble standard de R.
setdiff(x, y)
renvoie les éléments dex
qui ne sont pas dansy
.Comme indiqué ci-dessus, il s'agit d'une différence asymétrique. Donc par exemple:
> 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
la source
la source
setdiff()
est une fonction délicate car la sortie dépend de l'ordre de l'entrée. Vous pouvez à la place écrire une fonction simple en tant que telle qui fait exactement le contraire deintersect
. C'est bien mieux.>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
la source
Si:
x <- c(1,2,3,4) y <- c(2,3,4)
L'une de ces expressions:
setdiff(x, y) x[!(x %in% y)] x[is.na(match(x,y))] x[!(is.element(x,y))]
vous donnera la bonne réponse
[1] 1
, si le but est de trouver les valeurs / caractères dansx
, qui n'est pas présent dansy
.Cependant, l'application des expressions ci-dessus peut être délicate et peut donner des résultats indésirables selon la nature du vecteur et la position de x et y dans l'expression. Par exemple, si:
x <- c(1,1,2,2,3,4) y <- c(2,3,4)
et le but est simplement de trouver les valeurs / caractères uniques dans
x
, qui ne sont pas présents dansy
ou vice-versa. L'application de l'une de ces expressions donnera toujours la bonne réponse[1] 1
:Merci à la contribution de Jeromy Anglim
OU:
difference <- function(x, y) { c(setdiff(x, y), setdiff(y, x)) } difference(y,x)
Merci à la contribution de Workhouse
la source