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