Как заменить символы в ссылочной строке в определенных позициях, используя матрицу, содержащую позиции и новые символы?
Мне нужна помощь с 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