【问题标题】:Match strings between rows of a dataframe and report coordinates匹配数据框行和报告坐标之间的字符串
【发布时间】:2018-07-09 20:28:28
【问题描述】:

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

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)

非常感谢。

【问题讨论】:

  • 我是 R 新手,但我在用它分析数据方面投入了大量时间。希望有人可能有想法(可能还有代码)来解决这个问题。因为,grep/stringr 处理文本,所以添加了这些标签。但是,老实说,任何工具(在 R 内)都可以。谢谢。

标签: r


【解决方案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)

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

【讨论】:

  • 非常感谢@chinsoon12。这非常有效。输出与我想要的不完全相同,但更好:)
猜你喜欢
  • 2017-04-02
  • 2022-06-10
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多