Probar si un vector contiene un elemento dado
Pregunta
¿Cómo comprobar si un vector contiene un valor dado?
Solución
Tanto el match()
(devuelve la primera aparición) y %in%
(devuelve un booleano) funciones están diseñados 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
Otros consejos
is.element()
hace para el código más legible, y es idéntica 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
La cualquier () función lo convierte en un 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
voy a las opciones de grupo basada en la producción. 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
cualquier ()
> any('a'==v)
[1] TRUE
is.element ()
> is.element('a', v)
[1] TRUE
Para encontrar la primera ocurrencia:
match ()
> match('a', v)
[1] 2
Para encontrar todas las apariciones como vector de índices:
que ()
> which('a' == v)
[1] 2 4
Para encontrar todas las apariciones como vector lógico
==
> 'a' == v
[1] FALSE TRUE FALSE TRUE FALSE
Editar: Extracción grep () y Grepl () de la lista para la razón mencionada en los comentarios
Puede utilizar el operador %in%
:
vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false
Además de encontrar la posición del elemento "que" se puede utilizar como
pop <- c(3,4,5,7,13)
which(pop==13)
y encontrar los elementos que no están contenidas en el vector objetivo, se puede hacer esto:
pop <- c(1,2,4,6,10)
Tset <- c(2,10,7) # Target set
pop[which(!(pop%in%Tset))]
A mi me gusta grep () y () Grepl para este propósito.
grep () devuelve un vector de enteros, que indican dónde partidos son.
yo <- c("a", "a", "b", "b", "c", "c")
grep("b", yo)
[1] 3 4
Grepl () devuelve un vector lógico, con "TRUE" en la ubicación de cerillas.
yo <- c("a", "a", "b", "b", "c", "c")
grepl("b", yo)
[1] FALSE FALSE TRUE TRUE FALSE FALSE
Estas funciones son mayúsculas y minúsculas.