team software questions org how frequently citation asked r vector r-faq

questions - r software



Probar si un vector contiene un elemento dado (7)

¿Cómo comprobar si un vector contiene un valor dado?


Agruparé las opciones basadas en la salida. Supongamos el siguiente vector para todos los ejemplos.

v <- c(''z'', ''a'',''b'',''a'',''e'')

Para comprobar la presencia:

%en%

> ''a'' %in% v [1] TRUE

alguna()

> any(''a''==v) [1] TRUE

is.element ()

> is.element(''a'', v) [1] TRUE

Para encontrar la primera ocurrencia:

partido()

> match(''a'', v) [1] 2

Para encontrar todas las apariciones como vector de índices:

cual()

> which(''a'' == v) [1] 2 4

Para encontrar todas las ocurrencias como vector lógico :

==

> ''a'' == v [1] FALSE TRUE FALSE TRUE FALSE

Edición: Eliminar grep () y grepl () de la lista por la razón mencionada en los comentarios


La función any () hace para el código legible

> w <- c(1,2,3) > any(w==1) [1] TRUE > v <- c(''a'',''b'',''c'') > any(v==''b'') [1] TRUE > any(v==''f'') [1] FALSE


Puedes usar el operador %in% :

vec <- c(1, 2, 3, 4, 5) 1 %in% vec # true 10 %in% vec # false


Realmente me gusta grep () y grepl () para este propósito.

grep () devuelve un vector de enteros, que indican dónde están las coincidencias.

yo <- c("a", "a", "b", "b", "c", "c") grep("b", yo) [1] 3 4

grepl () devuelve un vector lógico, con "VERDADERO" en la ubicación de las coincidencias.

yo <- c("a", "a", "b", "b", "c", "c") grepl("b", yo) [1] FALSE FALSE TRUE TRUE FALSE FALSE

Estas funciones distinguen entre mayúsculas y minúsculas.


También para encontrar la posición del elemento "que" se puede utilizar como

pop <- c(3,4,5,7,13) which(pop==13)

y para encontrar los elementos que no están contenidos en el vector objetivo, uno puede hacer esto:

pop <- c(1,2,4,6,10) Tset <- c(2,10,7) # Target set pop[which(!(pop%in%Tset))]


Tanto la función match() (devuelve la primera aparición) como %in% (devuelve un booleano) están diseñadas para esto.

v <- c(''a'',''b'',''c'',''e'') ''b'' %in% v ## returns TRUE match(''b'',v) ## returns the first location of ''b'', in this case: 2


is.element() hace que el código sea más legible, y es idéntico a %in%

v <- c(''a'',''b'',''c'',''e'') is.element(''b'', v) ''b'' %in% v ## both return TRUE is.element(''f'', v) ''f'' %in% v ## both return FALSE subv <- c(''a'', ''f'') subv %in% v ## returns a vector TRUE FALSE is.element(subv, v) ## returns a vector TRUE FALSE