首页 > 解决方案 > 通过比较 R 中的 kmers 来查找连续性

问题描述

您好,我有一个如下所示的数据框:

  LR ID           Kmer       ProcID
    1         GTACGTAT         10
    1         TACGTATC         10
    1         ACGTATCG          2
    1         GTATCGTT          3
    2         GTTACGTA         16
    2         TTACGTAC         16
    2         TACGTACT         16
    2         ACGTACTT         11

输出类似于:

LR1 max length: 16 #(as 2 kmers are consecutively going to proc 10)
LR1 min length: 8
LR2 max length: 24 #(as 3 kmers are consecutively going to proc 16)

有 800 个像这样的 LR Id,它们让 kmers 进入不同的进程。我的目标是找到属于一个 LR ID 的最长不间断序列,该序列到达相同的目标 proc id。我需要将一行的 (k-1) 个字符与下一行进行比较,依此类推。

我知道有这个函数叫做

str_detect() 

在 R 中检查是否存在任何模式。我想知道有没有其他更好的方法来做到这一点?

标签: rstringstring-comparisonlongest-substringcontiguous

解决方案


ProcID我们可以计算每个中连续出现的次数,LRID并计算其中的最小值和最大值。

library(dplyr)

df %>%
  count(LRID, grp = data.table::rleid(ProcID)) %>%
  group_by(LRID) %>%
  summarise(max = max(n) * 8, 
            min = min(n) * 8)

#   LRID   max   min
#* <int> <dbl> <dbl>
#1     1    16     8
#2     2    24     8

或使用data.table

library(data.table)
setDT(df)[, .(n = .N), .(LRID, rleid(ProcID))][, .(max = max(n) * 8, min = min(8)), LRID]

推荐阅读