переместить первые два символа строки после определенного символа в строке - PullRequest
3 голосов
/ 25 апреля 2019

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

Например: g.chr17: 7577121G> A должно стать chr17: g.7577121G> A
g.chr3: 52712586T> C должно стать chr3: g.52712586T> C

Вероятно, есть очень простой способ сделать это с помощью gsub-пасты, но я не могу понять это.

Ответы [ 3 ]

3 голосов
/ 25 апреля 2019

Мы можем использовать sub с 3 группами захвата

sub("(^.{2})(.*:)(.*)", "\\2\\1\\3", x)
#[1] "chr17:g.7577121G>A" "chr3:g.52712586T>C"

^.{2} - Первая группа захвата - это первые два символа.

.*: - Вторая группа захвата - строка до двоеточия.

.* - Третья группа захвата - оставшаяся строка.

и теперь мы располагаем эти группы в порядке 2-1-3.

данные

x <- c("g.chr17:7577121G>A", "g.chr3:52712586T>C")
3 голосов
/ 25 апреля 2019

Попробуйте эту опцию:

input <- "g.chr17:7577121G>A"
input <- sub("^([^.]+\\.)([^:]+:)", "\\2\\1", input)
input

[1] "chr17:g.7577121G>A"

Шаблон может потребовать некоторого объяснения:

^                from the beginning of the input
    ([^.]+\\.)   match and capture any non dot characters up to and including
                 the first dot
    ([^:]+:)     then match and capture any non colon characters up to and
                 including the first colon

Затем мы заменяем этими двумя захваченными группами обращенные. В этом случае первая группа - g., а вторая группа - chr17:. Таким образом, строка замены будет начинаться с chr17:g., за которым следует то, что уже было.

2 голосов
/ 25 апреля 2019

Вот один без регулярных выражений

v1 <- strsplit(input, "[.:]")[[1]]
paste0(v1[2], ":", v1[1], ".", v1[3])
#[1] "chr17:g.7577121G>A"

данные

input <- "g.chr17:7577121G>A"
...