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 xqui n'est pas dans yest 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 xqui n'est pas dans yest 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 xqui 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 you 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.