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 dans x
qui n'est pas dans y
est 1?
vous pouvez utiliser la fonction setdiff () (set difference):
> setdiff(x, y)
[1] 1
Oui. Pour les vecteurs, vous pouvez simplement utiliser l'opérateur %in%
Ou la fonction is.element()
.
> x[!(x %in% y)]
1
Pour une matrice, il existe de nombreuses approches différentes. merge()
est probablement la plus simple. Je suggère en regardant cette question pour ce scénario .
Le fichier d'aide dans R pour setdiff, union, intersect, setequal et is.element fournit des informations sur les fonctions d'ensemble standard dans R.
setdiff(x, y)
renvoie les éléments de x
qui ne sont pas dans y
.
Comme indiqué ci-dessus, il s'agit d'une différence asymétrique. Ainsi, 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
x[is.na(match(x,y))]
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 de intersect
. 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