Подтвердить что ты не робот

Выбор строк, в которых столбец имеет строку типа "hsa.." (совпадение с частичной строкой)

У меня есть текстовый файл 371 МБ, содержащий данные микро РНК. По сути, я хотел бы выделить только те строки, которые содержат информацию о микроРНК человека.

Я прочитал в файле, используя read.table. Обычно, я бы выполнил то, что я хотел бы с sqldf, - если у него был синтаксис "как" (выберите * from < > где miRNA, как "hsa" ). К сожалению - sqldf не поддерживает этот синтаксис.

Как я могу это сделать в R? Я просмотрел stackoverflow и не вижу примера , как я могу выполнить частичное совпадение строк. Я даже установил пакет stringr, но у него не совсем то, что мне нужно.

Что бы я хотел сделать, это что-то вроде этого: там, где выбраны все строки, где hsa- *.

selectedRows <- conservedData[, conservedData$miRNA %like% "hsa-"]

что, конечно, является неправильным синтаксисом.

Может кто-нибудь, пожалуйста, помогите мне с этим? Большое спасибо за чтение.

Асда

4b9b3361

Ответ 1

Я заметил, что вы упомянете функцию %like% в своем текущем подходе. Я не знаю, является ли эта ссылка на %like% из "data.table", но если это так, вы можете определенно использовать ее следующим образом.

Обратите внимание, что объект не должен быть data.table (но также помните, что поднаборные подходы для data.frame и data.table не идентичны):

library(data.table)
mtcars[rownames(mtcars) %like% "Merc", ]
iris[iris$Species %like% "osa", ]

Если это то, что у вас было, то, возможно, вы просто смешали позиции строк и столбцов для подмножества данных.


Если вы не хотите загружать пакет, вы можете попробовать использовать grep() для поиска подходящей строки. Вот пример с набором данных mtcars, где мы сопоставляем все строки, в которых имена строк включают "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

И еще один пример, используя набор данных iris, который ищет строку 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

Для вашей проблемы попробуйте:

selectedRows <- conservedData[grep("hsa-", conservedData$miRNA), ]

Ответ 2

Попробуйте str_detect() из пакета stringr, который обнаруживает наличие или отсутствие шаблона в строке.

Вот подход, который также включает в себя трубу %>% и filter() из пакета 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
...

Это фильтрует образец данных CO2 (который поставляется вместе с R) для строк, где переменная обработки содержит подстроку "non". Вы можете настроить, найдет ли str_detect фиксированные соответствия или использует регулярное выражение - см. Документацию для пакета stringr.

Ответ 3

LIKE должен работать в 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