varios varias usos uso texto regulares patrones para palabras nombre expresiones exacto buscar avanzado archivos r dataframe grep subset

varias - ls grep



Usar grep para ayudar a subconjunto de un marco de datos en R (2)

Tengo problemas para subdividir mis datos. Quiero los datos subconjuntos en la columna x, donde los primeros 3 caracteres comienzan G45.

Mi marco de datos:

x <- c("G448", "G459", "G479", "G406") y <- c(1:4) My.Data <- data.frame (x,y)

Yo he tratado:

subset (My.Data, x=="G45*")

Pero no estoy seguro de cómo usar comodines. También he probado grep () para encontrar las indices:

grep ("G45*", My.Data$x)

pero devuelve las 4 filas, en lugar de solo las que comienzan en G45, probablemente también porque no estoy seguro de cómo usar comodines.


Es bastante sencillo usar [ para extraer:

grep le dará la posición en la que coincidió con su patrón de búsqueda (a menos que use value = TRUE ).

grep("^G45", My.Data$x) # [1] 2

Dado que está buscando dentro de los valores de una sola columna, eso en realidad corresponde al índice de la fila. Entonces, use eso con [ (donde usaría My.Data[rows, cols] para obtener filas y columnas específicas).

My.Data[grep("^G45", My.Data$x), ] # x y # 2 G459 2

La página de ayuda para el subset muestra cómo puede usar grep y grepl con subset si prefiere usar esta función sobre [ . Aquí hay un ejemplo.

subset(My.Data, grepl("^G45", My.Data$x)) # x y # 2 G459 2

A partir de R 3.3, ahora también startsWith función startsWith , que puede usar nuevamente con subset (o con cualquiera de los otros enfoques anteriores). De acuerdo con la página de ayuda para la función, es considerablemente más rápido que usar substring o grepl .

subset(My.Data, startsWith(as.character(x), "G45")) # x y # 2 G459 2


También puedes usar el paquete stringr

library(dplyr) library(stringr) My.Data %>% filter(str_detect(x, ''^G45''))

No puede usar ''^'' (comienza con) en este caso, para obtener los resultados que necesita