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 xque no yestá 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)] 1Para 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 elementosxque 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 5fuente
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 5fuente
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 enyo 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