匹配数据框行和报告坐标之间的字符串

时间:2018-07-09 20:28:29

标签: r

我有一个包含数百行的数据框,看起来像这样:

Gene = c("EIF4A1", "CAPNS1", "LDHA", "RPL38", "CCAR1")
Pep = c("TGKTATFAISILQQIELDLKA", "MFLVNSFLKGGGGG", "CAISILMKDLAD", "VITDKEKAEKLKQSL", "TPANYQLTQTAALQQQAA")
Seq = c("MSASQDSRSRDNGPDGMEPEGVIESNWNEIVDSFDDMNLSESLLRGIYAYGFEKPSAIQQRAILPCIKGYDVIAQAQSGTGKTATFAISILQQIELDLKATQALVL*",
          "MFLVNSFLKGGGGGGGGGGGLGGGLGNVLGGLISGAGGGGGGGGGGGGGGGGGGGGTAMRILGGVISAISEAAAQYNPES*",
          "MATLKDQLIYNLLKEEQTPQNKITVVGVGAVGMACAISILMKDLADELALVDVIEDKLKGEMMDLQHGSLFLRTPKIVSGKDVFTE",
          "MPRKIEEIKDFLLTARRKDAKSVKIKKNKDNVKFKVRCSRYLYTLVITDKEKAEKLKQSLPPGLAVKELK*",
          "MAQFGGQKNPPWATQFTATAVSQPAALGVQQPSLLGASPTIYTQQTALAAAGLTTQTPANYQLTQTAALQQQAAAAAAALQQQYSQPQDQKSKENGASV")

df_in = data.frame(Gene, Pep, Seq)

我想将"Pep"中的序列与"Seq"中的序列进行匹配,并报告匹配是否在"Seq"中的序列的第一,第二,第三或第四季度之内。如果序列落在边界内,则考虑匹配度> 50%的四分之一。

所需的输出data.frame:

df_out = data.frame(Gene, Pep, Seq, Q1, Q2, Q3, Q4)

非常感谢您。

1 个答案:

答案 0 :(得分:1)

对于第一个剪切,可以使用regexpr查找第一个匹配的索引。然后使用Pep中点的索引来检查它位于哪个季度。

df_in = data.frame(Gene, Pep, Seq, stringsAsFactors=FALSE)

mapply(function(pp, sq) {
        posn <- regexpr(pp, sq)[[1]]
        midpt <- (posn + posn + nchar(pp) - 1) / 2
        ceiling( midpt / nchar(sq) * 4 )
    }, df_in$Pep, df_in$Seq)

此后,如果无法在Seq等中找到Pep的确切字符串,则可以开始处理1)之类的特殊情况。

相关问题