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?
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?
Réponses:
Oui. Pour les vecteurs, vous pouvez simplement utiliser l' %in%
opérateur ou la is.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 .
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 de x
qui ne sont pas dans y
.
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
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
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 dans x
, qui n'est pas présent dans y
.
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 dans y
ou vice-versa. L'application de l'une de ces expressions donnera toujours la bonne réponse [1] 1
:
union(setdiff(x, y), setdiff(y, x))
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
setdiff(x,y)
etsetdiff(y,x)
ne sont pas les mêmes.