Извлечение частей строки символов с помощью gsub - PullRequest
0 голосов
/ 30 сентября 2019

Я довольно новичок в R и сейчас работаю со сценарием, который был сделан мной и моим руководителем. К сожалению, я не могу повторно использовать один экземпляр gsub () для имен моих образцов. Предыдущая версия выглядела так (Anterior и Posterior варьировались на протяжении всего df):

"1: Anterior LN_60_026.fcs"   

и были разобраны с помощью

cell.counts$EH_ID <- gsub("\\d+: (Anterior|Posterior) LN_(\\d{2})_\\d{3}.fcs", "LM02\\2", cell.counts$Sample)
cell.counts$Position <- gsub("\\d+: (Anterior|Posterior) LN_(\\d{2})_\\d{3}.fcs", "\\1", cell.counts$Sample)

Теперь я столкнулся с аналогичной проблемой, которая требует некоторыхнезначительная корректировка. Поскольку я не знаю, как работает синтаксис gsub (), я застрял:

"1: mLN_681_030.fcs"     

, для которого mLN и селезенка меняются в течение df, а код, который я пытался адаптировать, больше не работает:

cells$Mouse_ID <- gsub("\\d+: (mLN|spleen)(_\\d{2})_\\d{3}_\\.fcs", "AA_0\\2", cells$Sample)
cells$tissue <- gsub("\\d+: (mLN|spleen)_(\\d{3})_\\d{3}.fcs", "\\1", cells$Sample)

Я должен добавить, что «тканевое» разделение работает, а извлечение номера образца - нет. Если бы кто-нибудь мог объяснить мне, что я делаю неправильно и что конкретно делают символы в этом коде, я был бы очень благодарен. PS: Да, я использовал? Gsub, но я нахожу файлы справки в R довольно недружелюбным новичком и не очень много понял.

1 Ответ

0 голосов
/ 30 сентября 2019

Вы ожидаете ровно 2 цифры во второй группе захвата в строке идентификатора мыши, и перед вашим именем файла стоит завершающее подчеркивание.

Также во втором регулярном выражении вы не избежали ., который все ещеработает, потому что неоткрытый . будет соответствовать любому символу, но должен быть \\., как показано ниже.

# > str <- "1: mLN_681_030.fcs"
# > gsub(str, pattern="\\d+: (mLN|spleen)(_\\d{3})_\\d{3}\\.fcs", replacement = "AA_0\\2")
# [1] "AA_0_681"
# > gsub(str, pattern = "\\d+: (mLN|spleen)_(\\d{3})_\\d{3}\\.fcs", replacement = "\\1")
# [1] "mLN"
...