имя_хромосомы | Начальная позиция |
---|---|
CHR_HSCHR7_2_CTG6 | 142857940 |
CHR_HSCHR19LRC_PGF2_CTG3_1 | 54316049 |
Я только начал использовать R. У меня есть фрейм данных имен хромосом, но я просто хочу заменить длинные имена номером хромосомы. то есть CHR_HSCHR19LRC_PGF2_CTG3_1 будет "19" Мне нужно заменить длинное имя номером сразу после символов «HRCHR». Как бы я это сделал?
Я попробовал метод ручного ввода значения замены:
gsub(".*HSCHR19", "19", dataframe)
Но это занимает слишком много времени для списка из >100 значений. Я хотел бы найти способ сделать это автоматически.
Ты можешь использовать
sub('^.*CHR(\\d+).*$', '\\1', Chromosome_name)
#> [1] "7" "19"
Другим потенциальным вариантом является обратное регулярное выражение, например.
library(tidyverse)
df <- read.table(text = "Chromosome_name Start_Position
CHR_HSCHR7_2_CTG6 142857940
CHR_HSCHR19LRC_PGF2_CTG3_1 54316049", header = TRUE)
df2 <- df %>%
mutate(Chromosome_name = str_extract(Chromosome_name, "(?<=HSCHR)\\d+"))
df2
#> Chromosome_name Start_Position
#> 1 7 142857940
#> 2 19 54316049
Created on 2022-03-22 by the reprex package (v2.0.1)
Большое спасибо, ребята, они оба работают очень хорошо, но второй закончил тем, что удалил имена хромосом, которые уже были числами (я должен был сказать, что у меня есть сочетание строк символов и чисел). Я, наконец, использовал комбинацию двух методов, описанных выше, и это сработало! df2<- df %>% mutate(имя_хромосомы=sub('^.*CHR(\\d+).*$', '\\1', имя_хромосомы))