2011-04-15 13 views
21

¿Puedo buscar en una lista de caracteres una secuencia en la que no sé cómo se encadena la cadena? O, de manera más general, estoy tratando de hacer referencia a una columna en un marco de datos, pero no sé exactamente cómo están encasilladas las columnas. Mi idea era buscar nombres (myDataFrame) de una manera insensible a las mayúsculas y minúsculas para devolver la envoltura correcta de la columna.Búsqueda insensible a mayúsculas y minúsculas de una lista en R

Respuesta

21

Suponiendo que no hay nombres de las variables que se diferencian sólo en el caso, puede buscar el nombre de la variable en minúsculas en tolower(names(myDataFrame)):

match("b", tolower(c("A","B","C"))) 
[1] 2 

Esto producirá coincide sólo exacta, pero eso es probablemente deseable en este caso.

+0

El paquete de búsqueda que le permite activar la coincidencia de mayúsculas y minúsculas. – ctbrown

27

Sugeriría la función grep() y algunos de sus argumentos adicionales que hacen que sea un placer usarla.

grep("stringofinterest",names(dataframeofinterest),ignore.case=TRUE,value=TRUE) 

sin el argumento value=TRUE sólo obtendrá un vector de posiciones de índice donde se produjo el encuentro.

1

searchable El paquete fue creado para permitir de varios tipos de búsqueda dentro de los objetos:

l <- list(a=1, b=2, c=3) 
sl <- searchable(l)  # make the list "searchable" 
sl <- ignore.case(sl)  # turn on case insensitivity 

> sl['B'] 
$b 
[1] 2 

Funciona con listas y vectores y hace mucho más que una simple coincidencia de mayúsculas y minúsculas.

0

Si desea buscar un conjunto de cadenas en otro conjunto de cadenas, caso insensible, podría intentar:

s1 = c("a", "b") 
s2 = c("B", "C") 
matches = s1[ toupper(s1) %in% toupper(s2) ] 
0

Otra forma de lograr esto es utilizar str_which(string, pattern) del paquete stringr:

library("stringr") 
str_which(string = tolower(colnames(iris)), pattern = "species") 
Cuestiones relacionadas