En R, ¿cómo se prueba un vector para ver si contiene un elemento dado?prueba si un vector contiene un elemento dado
Respuesta
Tanto match()
(devuelve la primera aparición) como %in%
(devuelve un booleano) las funciones 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
Puede utilizar el %in%
operador:
vec <- c(1, 2, 3, 4, 5)
1 %in% veC# true
10 %in% veC# false
El cualquier() función hace que para 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
Tenga en cuenta que esto se comporta de manera diferente a '% in%': 'any (1 == NA)' devuelve 'NA', donde' 1% en% NA' devuelve 'FALSO '. – dash2
también para encontrar la posición del elemento "que" se puede usar como
pop <- c(3,4,5,7,13)
which(pop==13)
y para 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))]
'which' es realmente preferible a veces porque le da * todas * las posiciones correspondientes (como una matriz), a diferencia de' match'. Aunque esto quizás no fue lo que solicitó OP, a diferencia de http://stackoverflow.com/questions/1169388/finding-multiple-elements-in-a-vector – Fizz
¿Por qué molestarse con 'which' si solo quiere encontrar los elementos? no en 'Tset'? Puedes simplemente indexar 'pop' directamente; 'pop [! pop% in% Tset]' – Houshalter
is.element()
lo convierte en un código más legible, y es idéntico al %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
Sé que la documentación dice 'is.element (x, y) es idéntica a x% en% y'. Pero, no sé por qué, 'is.elements' funciona al mezclar números enteros y numéricos y'% en% 'no – pomber
@pomber: ¿Podría dar un ejemplo de esto? – discipulus
Realmente como 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 "TRUE" 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.
Por defecto, 'grep' toma una expresión regular como su primer elemento, por lo que para hacer una coincidencia exacta para' "b" ', use'^e $ 'o agregue', fixed = TRUE'). – reinierpost
No utilice la expresión regular para las coincidencias exactas. Esto es peligroso y puede tener resultados inesperados –
Sí, esta es una idea terrible, no buena, muy mala: ineficiente y garantizada para romperse. P.ej. 'myvar <- 'blah'; grepl ('b', myvar, fixed = TRUE) 'devolverá' TRUE' aunque 'b' no esté en 'myvar'. – dash2
Voy a agrupar las opciones según la salida. Supongamos el siguiente vector para todos los ejemplos.
v <- c('z', 'a','b','a','e')
Para la comprobación de presencia:
% en%
> 'a' %in% v
[1] TRUE
cualquier()
> any('a'==v)
[1] TRUE
es.elemento()
> 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:
que()
> which('a' == v)
[1] 2 4
Para encontrar todas las ocurrencias como lógica vector:
==
> '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
Como ya se comentó [aquí] (https://stackoverflow.com/questions/1169248/r-function-for-testing-if-a-vector-contains-a-given-element/34056066#comment66181358_34056066) y [aquí] (https://stackoverflow.com/questions/1169248/r-function-for-testing-if-a-vector-contains-a-given-element/34056066#comment73025314_34056066), no use 'grep()' o expresiones regulares para encontrar coincidencias exactas. – Uwe
- 1. Selenio: prueba si el elemento contiene texto
- 2. JUnit 3 - La matriz contiene un elemento dado
- 3. comprobar si un std :: vector contiene un determinado objeto?
- 4. ¿Cómo realizo una prueba de condición MSBuild si un grupo de elementos contiene un elemento?
- 5. Prueba si un div no tiene un elemento
- 6. ¿Cómo comprobar en MATLAB si un vector solo contiene ceros?
- 7. ¿Cómo generar un vector que contiene una secuencia numérica con un paso dado?
- 8. php - encontrar si un array contiene un elemento
- 9. mercurial: prueba si una rama contiene un conjunto de cambios
- 10. Comprueba si un elemento DOM dado está listo
- 11. ¿Cómo buscar un elemento en un vector?
- 12. ¿Cómo afirmar que la colección contiene solo un elemento con un valor de propiedad dado?
- 13. cheque jQuery si el elemento contiene un atributo
- 14. ¿Cómo comprobar si una tabla contiene un elemento en Lua?
- 15. Cómo probar si la matriz contiene al menos un elemento
- 16. ¿Cómo puedo saber si un elemento contiene una clase específica?
- 17. Comprobar si una Lista ya contiene un elemento o no?
- 18. comprueba si div contiene un elemento en jQuery
- 19. Comprobar si una cadena está presente como un elemento en un vector
- 20. xRuta: Elija un elemento padre sólo si elemento secundario no contiene un cierto valor
- 21. ¿Cómo detectar si un número dado es un número entero?
- 22. ¿Detecta si un NSString contiene ...?
- 23. Cadena contiene solo un conjunto dado de caracteres
- 24. ¿Cuál es la mejor manera de detectar si un objeto Javascript dado es un elemento DOM?
- 25. ¿Encontrar k vecinos más cercanos para un vector dado?
- 26. Si el elemento padre no contiene cierto elemento hijo; jQuery
- 27. Si el elemento contiene cierto texto
- 28. Extraiga cada elemento enésimo de un vector
- 29. Elemento XPath que contiene un atributo y el elemento primario de su padre contiene otro atributo
- 30. ¿Cómo se prueba si un C Hashtable contiene un par clave/valor específico?
veces me pregunto por qué R simplemente no utiliza la palabra contiene para que sea más fácil a los usuarios consideran que – greg121
"en" se contiene en "conta (in) s"; Yo diría que "en" es un contendiente considerablemente conciso en este contexto – hedgedandlevered
Quizás con la adición de los flancos '%' -signos que es. La palabra 'in' es una palabra reservada en uso de R en la construcción for-loop. –