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