如何使用包含位置和新字符的矩阵替换特定位置的引用字符串中的字符?

时间:2017-06-18 22:46:52

标签: r string matrix character-replacement

我需要一个R脚本的帮助,我想在字符串中的定义位置替换字符。定义的位置和替换字符将保存在矩阵中。

我经常使用Bioconductor包,但我没有做过任何真正的编程。我没有其他语言的经验,所以我想尽可能使用R.

这是我的示例字符串(30 bp参考氨基酸(AA)序列):

df <- EVHGSGIRVDSNTTFLTPVATGNQYLKDGG

以下是data.frame:

的示例

样本&lt; - 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.下一列的标签对应于参考序列中的位置。每行包含样本的AA。

我的输出将是样本的唯一完整序列。我需要使用矩阵中包含的信息替换每个样本的参考序列中的AA,然后打印出序列。

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 个答案:

答案 0 :(得分:0)

这应该让你开始:

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