Переименование нескольких файлов с сохранением первых 6 символов - PullRequest
0 голосов
/ 06 августа 2020

Как переименовать файл с Pbs_d7_s2_juliam_08July2020_02_1_0_live singlets.fcs в Pbs_d7_s2.fcs

Для нескольких файлов, имея в виду, что _juliam_08July2020_02_1_0_live singlets не является одинаковым для всех файлов?

1 Ответ

0 голосов
/ 06 августа 2020

Немного неясно, о чем вы просите, но похоже, что вы хотите сохранить только фрагменты до третьего подчеркивания. Если это так, вы можете решить эту проблему с помощью регулярных выражений. Регулярное выражение

    str_extract(input_string, "^(([^_])+_){3}")

удалит первые 3 блока символов (которые не являются подчеркиванием), которые заканчиваются подчеркиванием. Первый ^ "привязывает" совпадение к началу строки, "[^ _] + _" соответствует любому количеству символов без подчеркивания перед знаком подчеркивания. {3} выполняет предыдущую операцию 3 раза.

Итак, для "Pbs_d7_s2_juliam_08July2020_02_1_0_live singlets.fcs" вы получите "Pbs_d7_s2_". Теперь вы просто замените последнее подчеркивание на «.fcs», например,

    str_replace(modified string, "_$", ".fcs")

$ «привязывает» символы, которые предшествуют ему, к концу строки, так что в данном случае он заменяет последнее подчеркивание. Полная последовательность:

    string1<- "Pbs_d7_s2_juliam_08July2020_02_1_0_live singlets.fcs" 
    str_extract(string1, "^(([^_])+_){3}") %>%
    str_replace("_$",".fcs")

    [1] "Pbs_d7_s2.fcs"

Теперь предположим, что ваши имена файлов находятся в векторе с именем stringve c.

    output <- vector("character",length(stringvec))
    for (i in seq_along(stringvec)) {
    output[[i]] <- str_extract(stringvec[[i]],"^(([^_])+_){3}")%>% 
    str_replace("_$",".fcs")
     }
     output

Я делаю здесь некоторые предположения, а именно, что соглашение об именах одинаково для всех ваших файлов. Если это не так, вам нужно будет найти способы изменить шаблон поиска регулярных выражений.

Я рекомендую этот ответ Как мне переименовать файлы с помощью R? для замены векторов имен файлов. Если у вас есть вектор исходных имен файлов, вы можете использовать my for l oop, чтобы сгенерировать вектор новых имен, а затем вы можете использовать информацию в ссылке, чтобы заменить одно на другое. Возможно, есть другие решения, не связанные с циклами for.

...