string - texto - funcion contiene excel
Seleccionar filas donde una columna tiene una cadena como ''hsa..''(coincidencia de cadena parcial) (3)
Tengo un archivo de texto de 371MB que contiene datos de micro ARN. Básicamente, me gustaría seleccionar solo aquellas filas que tienen información sobre microRNA humano.
He leído en el archivo usando read.table. Por lo general, lograría lo que quisiera con sqldf, si tuviera una sintaxis similar (seleccione * de <> donde miRNA como ''hsa''). Desafortunadamente, sqldf no es compatible con esa sintaxis.
¿Cómo puedo hacer esto en R? He buscado en stackoverflow y no veo un ejemplo de cómo puedo hacer una coincidencia de cadena parcial . Incluso instalé el paquete stringr, pero no tiene exactamente lo que necesito.
Lo que me gustaría hacer es algo como esto, donde se seleccionan todas las filas donde hsa- * .
selectedRows <- conservedData[, conservedData$miRNA %like% "hsa-"]
que, por supuesto, no es la sintaxis correcta.
¿Puede alguien ayudarme con esto? Muchas gracias por leer.
Asda
Noto que mencionas una función %like%
en tu enfoque actual. No sé si eso es una referencia al %like%
de "data.table", pero si lo es, definitivamente puedes usarlo de la siguiente manera.
Tenga en cuenta que el objeto no tiene que ser un data.table
(pero también recuerde que los enfoques de data.frame
para data.frame
s y data.table
s no son idénticos):
library(data.table)
mtcars[rownames(mtcars) %like% "Merc", ]
iris[iris$Species %like% "osa", ]
Si eso es lo que tenía, entonces tal vez había mezclado posiciones de fila y columna para subconjuntos de datos.
Si no desea cargar un paquete, puede intentar usar grep()
para buscar la cadena que está buscando. Aquí hay un ejemplo con el conjunto de datos mtcars
, donde estamos haciendo coincidir todas las filas donde los nombres de fila incluyen "Merc":
mtcars[grep("Merc", rownames(mtcars)), ]
mpg cyl disp hp drat wt qsec vs am gear carb
# Merc 240D 24.4 4 146.7 62 3.69 3.19 20.0 1 0 4 2
# Merc 230 22.8 4 140.8 95 3.92 3.15 22.9 1 0 4 2
# Merc 280 19.2 6 167.6 123 3.92 3.44 18.3 1 0 4 4
# Merc 280C 17.8 6 167.6 123 3.92 3.44 18.9 1 0 4 4
# Merc 450SE 16.4 8 275.8 180 3.07 4.07 17.4 0 0 3 3
# Merc 450SL 17.3 8 275.8 180 3.07 3.73 17.6 0 0 3 3
# Merc 450SLC 15.2 8 275.8 180 3.07 3.78 18.0 0 0 3 3
Y, otro ejemplo, usando el dataset de iris
buscando la cadena osa
:
irisSubset <- iris[grep("osa", iris$Species), ]
head(irisSubset)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5.4 3.9 1.7 0.4 setosa
Para su problema, intente:
selectedRows <- conservedData[grep("hsa-", conservedData$miRNA), ]
Pruebe str_detect()
desde el paquete stringr , que detecta la presencia o ausencia de un patrón en una cadena.
Aquí hay un enfoque que también incorpora el %>%
pipe y filter()
del paquete dplyr :
library(stringr)
library(dplyr)
CO2 %>%
filter(str_detect(Treatment, "non"))
Plant Type Treatment conc uptake
1 Qn1 Quebec nonchilled 95 16.0
2 Qn1 Quebec nonchilled 175 30.4
3 Qn1 Quebec nonchilled 250 34.8
4 Qn1 Quebec nonchilled 350 37.2
5 Qn1 Quebec nonchilled 500 35.3
...
Esto filtra el conjunto de datos de CO2 de muestra (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.
LIKE
debería funcionar en sqlite:
require(sqldf)
df <- data.frame(name = c(''bob'',''robert'',''peter''),id=c(1,2,3))
sqldf("select * from df where name LIKE ''%er%''")
name id
1 robert 2
2 peter 3