匹配数据帧的行和报表坐标之间的字符串



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

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%的四分之一。

所需输出数据帧:

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

非常感谢。

对于第一个剪切,可以使用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)

在此之后,您可以开始处理特殊情况,如1(如果在Seq等中找不到Pep的确切字符串。

最新更新