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

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

Я прочитал в файле с помощью read.table. Обычно я'сделаю то, что яхочу с sqldf - если былайк' синтаксис (выберите * из <> где миРНК нравитсяHSA»). К сожалению - sqldf не поддерживает этот синтаксис.

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

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

selectedRows 
 A5C1D2H2I1M1N2O1R2T124 окт. 2012 г., 08:32
Можете ли вы опубликовать несколько строк ваших данных, предпочтительно используя что-то вроде.dput(head(conservedData))

Ответы на вопрос(3)

LIKE должен работать в sqlite:

require(sqldf)
df 
 Suat Atan PhD12 янв. 2017 г., 13:59
SQLDF лучше всего подходит для листинга. Тем не менее, он не может удалить строки.
 rgalbo27 мар. 2017 г., 20:28
Почему пакет R загружается сrequire() Вот
 bartektartanus17 авг. 2017 г., 18:10
Потому что это не стандартная библиотека R, и вы должны вручную установить ее, а затем загрузить, используяrequire функция.

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) для строк, где переменная Treatment содержит подстроку "не», Вы можете настроитьstr_detect находит фиксированные совпадения или использует регулярные выражения - см. документацию для пакета stringr.

 Bemipefe18 апр. 2019 г., 09:03
Вы также можете использоватьtrc_detect функционировать такmyDataFrame[str_detect(myDataFrame$key, myKeyPattern),]

%like% в вашем текущем подходе. Я нене знаю, если этоссылка на%like% от "Таблица данных", но если это так, вы можете использовать его следующим образом.

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

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), ]
 Aren Cambre26 дек. 2017 г., 03:21
%лайк% предложение отличное! Я рекомендую поставить это в верхней части вашего ответа.
 Stephan Kolassa24 окт. 2012 г., 23:56
@nico: на самом деле,grep происходит от команды ed g / re / p (глобальное / регулярное выражение / печать) и раскрывает свою реальную силу только мастеру регулярного выражения-fu ;-):en.wikipedia.org/wiki/Grep
 A5C1D2H2I1M1N2O1R2T126 дек. 2017 г., 04:00
@ArenCambre, готово. Может быть, это поможет мне получить еще 11 голосов, чтобы я мог получить новую шляпу до конца года :-)
 nico24 окт. 2012 г., 08:40
+1: также обратите внимание, чтоgrep поддерживает регулярные выражения, поэтому вы можете захотеть grep для^hsa- вместо.

Ваш ответ на вопрос