Сопоставление с шаблоном с использованием регулярных выражений для грязных имен файлов - PullRequest
0 голосов
/ 14 февраля 2020

У меня нет особого опыта работы с RE, но мне нужно проанализировать сотни имен файлов, чтобы сгенерировать набор данных 'метаданных'. Я был в состоянии генерировать текстовые файлы, которые включают пути к файлам и имя файла. Мне просто разобрать полное имя файла, но мне нужно иметь возможность проанализировать «образец ID» из имени файла.

Проблема заключается в том, что синтаксис «идентификаторов образцов» повсеместен (см. Прилагаемые данные в формате csv, например: цель состоит в том, чтобы go из столбца «образец» в столбец «ИД») ). Я пробовал серию команд strsplit (), но это очень громоздко и не является функциональным по своей природе. Я также попытался написать функцию с несколькими операторами IF, основанными на синтаксической структуре. Я чувствую, что это все еще не очень хорошее решение, потому что оно все еще зависит от того, чтобы я вручную определял другой синтаксис перед этим, и я мог легко что-то упустить, так как я должен сделать это на глаз.

Мне кажется, что это проблема регулярных выражений, но я мог бы использовать некоторые ресурсы, чтобы помочь мне начать. Я хотел бы иметь возможность сделать это либо в R или Python, если это возможно. Спасибо за любые ресурсы или пакеты / модули, которые могут быть полезны.

dput(head(brain_ref, 25))
structure(list(file = c("/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/BXH12_1_brain_total_RNA_cDNA_GTCCGC.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/BXH12_2_brain_total_RNA_cDNA_CAGATC.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/HXB13_1_brain_total_RNA_cDNA_ATGTCA.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/HXB13_2_brain_total_RNA_cDNA_GTGAAA.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/HXB17_1_brain_total_RNA_cDNA_CCGTCC.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/HXB17_2_brain_total_RNA_cDNA_ATGTCA.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/HXB2_1_brain_total_RNA_cDNA_GTCCGC.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/HXB2_2_brain_total_RNA_cDNA_CTTGTA.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/HXB25_1_brain_total_RNA_cDNA_AGTTCC.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/HXB25_2_brain_total_RNA_cDNA_AGTCAA.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/HXB27_1_brain_total_RNA_cDNA_CGATGT.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/HXB27_2_brain_total_RNA_cDNA_AGTTCC.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/HXB7_1_brain_total_RNA_cDNA_ACAGTG.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/HXB7_2_brain_total_RNA_cDNA_AGTCAA.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/SHR_1_brain_total_RNA_cDNA_GCCAAT.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch1/ensembl_v96/SHR_2_brain_total_RNA_cDNA_TGACCA.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch10/ensembl_v96/ACI-SegHsd-2-brain-total-RNA_S17.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch10/ensembl_v96/BXH2-3-brain-total-RNA_S4.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch10/ensembl_v96/BXH5-3-brain-total-RNA_S3.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch10/ensembl_v96/BXH8-3-brain-total-RNA_S5.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch10/ensembl_v96/Cop-CrCrl-2-brain-total-RNA_S10.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch10/ensembl_v96/Dark-Agouti-1-brain-total-RNA_S16.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch10/ensembl_v96/Dark-Agouti-2-brain-total-RNA_S13.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch10/ensembl_v96/F344-NCI-1-brain-total-RNA_S18.genes.results", 
"/data/rn6/quantitation/brainTotalRNA/RI/batch10/ensembl_v96/F344-NCI-2-brain-total-RNA_S15.genes.results"
), sample = c("BXH12_1_brain_total_RNA_cDNA_GTCCGC", "BXH12_2_brain_total_RNA_cDNA_CAGATC", 
"HXB13_1_brain_total_RNA_cDNA_ATGTCA", "HXB13_2_brain_total_RNA_cDNA_GTGAAA", 
"HXB17_1_brain_total_RNA_cDNA_CCGTCC", "HXB17_2_brain_total_RNA_cDNA_ATGTCA", 
"HXB2_1_brain_total_RNA_cDNA_GTCCGC", "HXB2_2_brain_total_RNA_cDNA_CTTGTA", 
"HXB25_1_brain_total_RNA_cDNA_AGTTCC", "HXB25_2_brain_total_RNA_cDNA_AGTCAA", 
"HXB27_1_brain_total_RNA_cDNA_CGATGT", "HXB27_2_brain_total_RNA_cDNA_AGTTCC", 
"HXB7_1_brain_total_RNA_cDNA_ACAGTG", "HXB7_2_brain_total_RNA_cDNA_AGTCAA", 
"SHR_1_brain_total_RNA_cDNA_GCCAAT", "SHR_2_brain_total_RNA_cDNA_TGACCA", 
"ACI-SegHsd-2-brain-total-RNA_S17", "BXH2-3-brain-total-RNA_S4", 
"BXH5-3-brain-total-RNA_S3", "BXH8-3-brain-total-RNA_S5", "Cop-CrCrl-2-brain-total-RNA_S10", 
"Dark-Agouti-1-brain-total-RNA_S16", "Dark-Agouti-2-brain-total-RNA_S13", 
"F344-NCI-1-brain-total-RNA_S18", "F344-NCI-2-brain-total-RNA_S15"
), batch = c("batch1", "batch1", "batch1", "batch1", "batch1", 
"batch1", "batch1", "batch1", "batch1", "batch1", "batch1", "batch1", 
"batch1", "batch1", "batch1", "batch1", "batch10", "batch10", 
"batch10", "batch10", "batch10", "batch10", "batch10", "batch10", 
"batch10"), ID = c("BXH12_1", "BXH12_2", "HXB13_1", "HXB13_2", 
"HXB17_1", "HXB17_2", "HXB2_1", "HXB2_2", "HXB25_1", "HXB25_2", 
"HXB27_1", "HXB27_2", "HXB7_1", "HXB7_2", "SHR_1", "SHR_2", "ACI-SegHsd_2", 
"BXH2_3", "BXH5_3", "BXH8_3", "Cop-CrCrl_2", "Dark-Agouti_1", 
"Dark-Agouti_2", "F344-NCI_1", "F344-NCI_2")), row.names = c(NA, 
25L), class = "data.frame")

Ответы [ 4 ]

1 голос
/ 14 февраля 2020

Вдохновленный в @ r2evans комментарий :

samples <- c("SHR_1_brain_total_RNA_cDNA_GCCAAT", "SHR-1-brain-total-RNA_S6")
sub("[_-]([0-9]+)[_-]*brain.*", "_\\1", samples)
#[1] "SHR_1" "SHR_1"
0 голосов
/ 14 февраля 2020

Почему бы просто:

for name in names:
    m = re.match(r'(.*)[_\-]brain[_\-]total', name)
    print(m.group(1))
0 голосов
/ 14 февраля 2020

В R мы также можем удалить подстроку вместо записи

sub("[-_]brain.*", "", names)
#[1] "ABBA-1_2"  "BABBA-2_2" "ARA_1-1_2"

Или с помощью trimws

trimws(names, whitespace = "[-_]brain.*")
#[1] "ABBA-1_2"  "BABBA-2_2" "ARA_1-1_2"

Используя пример OP

library(dplyr)
library(stringr)
brain_ref <-  brain_ref %>%
                 mutate(newsample = str_remove(sample,  "[_-]brain.*"))

данные

names <- c("ABBA-1_2-brain-total2", "BABBA-2_2_brain-total2", "ARA_1-1_2-brain-total2")
0 голосов
/ 14 февраля 2020

Если все образцы содержат _brain или -brain, и вы хотите сохранить материал до того, как вы могли бы сделать:

names=c("ABBA-1_2-brain-total2", "BABBA-2_2_brain-total2", "ARA_1-1_2-brain-total2")
gsub("(.*).brain.*", "\\1", names)
#> [1] "ABBA-1_2"  "BABBA-2_2" "ARA_1-1_2"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...