En matlab hay una forma de encontrar los valores en un vector pero no en el otro.
por ejemplo:
x <- c(1,2,3,4)
y <- c(2,3,4)
¿Hay alguna función que me diga que el valor x
que no y
está en es 1?
puede utilizar la función setdiff () (establecer diferencia):
> setdiff(x, y)
[1] 1
setdiff(x,y)
ysetdiff(y,x)
no son lo mismo.Si. Para los vectores, simplemente puede usar el
%in%
operador o lais.element()
función.> x[!(x %in% y)] 1
Para una matriz, hay muchos enfoques diferentes.
merge()
es probablemente el más sencillo. Sugiero mirar esta pregunta para ese escenario .fuente
El archivo de ayuda en R para setdiff, union, intersect, setequal e is.element proporciona información sobre las funciones de conjunto estándar en R.
setdiff(x, y)
devuelve los elementosx
que no están eny
.Como se señaló anteriormente, es una diferencia asimétrica. Así por ejemplo:
> 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
fuente
fuente
setdiff()
es una función complicada porque la salida depende del orden de la entrada. En su lugar, puede escribir una función simple como tal que haga exactamente lo contrario deintersect
. Esto es mucho mejor.>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
fuente
Si:
x <- c(1,2,3,4) y <- c(2,3,4)
Cualquiera de estas expresiones:
setdiff(x, y) x[!(x %in% y)] x[is.na(match(x,y))] x[!(is.element(x,y))]
le dará la respuesta correcta
[1] 1
, si el objetivo es encontrar los valores / caracteres enx
, que no está presente eny
.Sin embargo, aplicar las expresiones anteriores puede ser complicado y puede dar resultados no deseados según la naturaleza del vector y la posición de xey en la expresión. Por ejemplo, si:
x <- c(1,1,2,2,3,4) y <- c(2,3,4)
y el objetivo es simplemente encontrar los valores / caracteres únicos en
x
, que no están presentes eny
o viceversa. La aplicación de cualquiera de estas expresiones aún dará la respuesta correcta[1] 1
:Gracias a la contribución de Jeromy Anglim
O:
difference <- function(x, y) { c(setdiff(x, y), setdiff(y, x)) } difference(y,x)
Gracias a la contribución de Workhouse
fuente