Quiero seleccionar filas de un marco de datos basado en la coincidencia parcial de una cadena en una columna, por ejemplo, la columna 'x' contiene la cadena "hsa". Usando sqldf
, si tuviera una like
sintaxis, haría algo como:
select * from <> where x like 'hsa'
.
Desafortunadamente, sqldf
no es compatible con esa sintaxis.
O similar:
selectedRows <- df[ , df$x %like% "hsa-"]
Lo cual, por supuesto, no funciona.
¿Puede alguien ayudarme con esto?
dput(head(conservedData))
.Respuestas:
Noto que menciona una función
%like%
en su enfoque actual. No sé si eso es una referencia a%like%
from "data.table", pero si lo es, definitivamente puede usarlo de la siguiente manera.Tenga en cuenta que el objeto no tiene que ser a
data.table
(pero también recuerde que los enfoques de subconjuntos paradata.frame
sydata.table
s no son idénticos):Si eso es lo que tenía, entonces quizás acababa de mezclar las posiciones de filas y columnas para subconjuntos de datos.
Si no desea cargar un paquete, puede intentar usarlo
grep()
para buscar la cadena que está haciendo coincidir. Aquí hay un ejemplo con elmtcars
conjunto de datos, donde estamos haciendo coincidir todas las filas donde los nombres de las filas incluyen "Merc":Y, otro ejemplo, usando el
iris
conjunto de datos buscando la cadenaosa
:Para su problema intente:
fuente
grep
admite expresiones regulares, por lo que es posible que desee grep en su^hsa-
lugar.grep
proviene del comando ed g / re / p (global / regular expression / print), y revela su poder real solo al maestro de la expresión regular-fu ;-): en.wikipedia.org/ wiki / GrepPruebe
str_detect()
con el paquete stringr , que detecta la presencia o ausencia de un patrón en una cadena.Aquí hay un enfoque que también incorpora la
%>%
tubería yfilter()
del paquete dplyr :Esto filtra el conjunto de datos de muestra de CO2 (que viene con R) para las filas donde la variable Tratamiento contiene la subcadena "no". Puede ajustar si
str_detect
encuentra coincidencias fijas o usa una expresión regular; consulte la documentación del paquete stringr.fuente
myDataFrame[str_detect(myDataFrame$key, myKeyPattern),]
LIKE
debería funcionar en sqlite:fuente
require()
aquí?require
función.