Как заменить символы в ссылочной строке в определенных позициях, используя матрицу, содержащую позиции и новые символы?

Мне нужна помощь с R-скриптом, где я хотел бы заменить символы в определенных позициях в строке. Определенные позиции и символы замены будут храниться в матрице.

Я часто использовал пакеты Bioconductor, но я не занимался программированием. У меня нет опыта работы на других языках, поэтому я хотел бы использовать R, если это возможно.

Вот мой пример строки (последовательность 30 аминокислотных оснований контрольной аминокислоты (AA)):

df <- EVHGSGIRVDSNTTFLTPVATGNQYLKDGG

Вот пример data.frame:

samples <- read.csv ("samples.csv")

Sample  1   12  17  22  23  25
1       K   N   T   E   N   D
2       E   K   T   E   N   D
3       E   N   T   G   N   Y
4       E   K   T   E   N   D
5       E   N   T   G   K   D
6       K   N   T   E   N   D
7       K   K   T   G   K   D
8       E   K   T   E   N   D
9       E   N   K   G   N   D
10      E   N   T   E   N   D

Столбец 1 - это образец №. Я перечислил образцы 1 - 10. Метки для следующих столбцов соответствуют позиции в ссылочной последовательности. Каждая строка содержит АА для образца.

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

Sample  Sample Sequence 
 1      KVHGSGIRVDSNTTFLTPVATENQDLKDGG  
 2      EVHGSGIRVDSKTTFLTPVATENQDLKDGG  
 3      EVHGSGIRVDSNTTFLTPVATGNQYLKDGG  
 4      EVHGSGIRVDSKTTFLTPVATENQDLKDGG  
 5      EVHGSGIRVDSNTTFLTPVATGKQDLKDGG  
 6      KVHGSGIRVDSNTTFLTPVATENQDLKDGG  
 7      KVHGSGIRVDSKTTFLTPVATGKQDLKDGG  
 8      EVHGSGIRVDSKTTFLTPVATENQDLKDGG  
 9      EVHGSGIRVDSNTTFLKPVATGNQDLKDGG  
 10     EVHGSGIRVDSNTTFLTPVATENQDLKDGG  

У кого-нибудь есть предложения, чтобы помочь мне начать? Мой набор образцов большой с 225 образцами и 60 полиморфными участками. Заранее спасибо.

1 ответ

Это должно помочь вам начать:

my.aa <- "EVHGSGIRVDSNTTFLTPVATGNQYLKDGG"

my.df <- read.table(
   text = "Sample  1   12  17  22  23  25
   1       K   N   T   E   N   D
   2       E   K   T   E   N   D
   3       E   N   T   G   N   Y
   4       E   K   T   E   N   D
   5       E   N   T   G   K   D
   6       K   N   T   E   N   D
   7       K   K   T   G   K   D
   8       E   K   T   E   N   D
   9       E   N   K   G   N   D
   10      E   N   T   E   N   D",
   header = FALSE,
   stringsAsFactors = FALSE
)

my.pos <- as.numeric(my.df[1, -1])

my.df <- my.df[-1, ]

split.aa <- unlist(strsplit(my.aa, ""))

data.frame(sample = my.df$V1, Sequence = do.call(rbind, apply(my.df[,-1], 1, function(x) {
   split.aa[my.pos] <- x
      return(list(paste0(split.aa, collapse = "")))
   })), row.names = NULL)

Который дает:

   sample                       Sequence
1       1 KVHGSGIRVDSNTTFLTPVATENQDLKDGG
2       2 EVHGSGIRVDSKTTFLTPVATENQDLKDGG
3       3 EVHGSGIRVDSNTTFLTPVATGNQYLKDGG
4       4 EVHGSGIRVDSKTTFLTPVATENQDLKDGG
5       5 EVHGSGIRVDSNTTFLTPVATGKQDLKDGG
6       6 KVHGSGIRVDSNTTFLTPVATENQDLKDGG
7       7 KVHGSGIRVDSKTTFLTPVATGKQDLKDGG
8       8 EVHGSGIRVDSKTTFLTPVATENQDLKDGG
9       9 EVHGSGIRVDSNTTFLKPVATGNQDLKDGG
10     10 EVHGSGIRVDSNTTFLTPVATENQDLKDGG
Другие вопросы по тегам