代码之家  ›  专栏  ›  技术社区  ›  ip2018

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

r
  •  1
  • ip2018  · 技术社区  · 8 年前

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

    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" 并报告匹配是否在序列的第一、第二、第三或第四个季度内 “顺序” 是的。如果序列落在边界内,则考虑使用50%匹配的四分之一。

    所需输出数据帧:

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

    非常感谢。

    1 回复  |  直到 8 年前
        1
  •  1
  •   chinsoon12    8 年前

    对于第一次切割,您可以使用 regexpr 找到第一个匹配项的索引。然后使用政治公众人物中点的索引检查政治公众人物所在的季度。

    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)等。