【问题标题】:Finding contiguity by comparing kmers in R通过比较 R 中的 kmers 来查找连续性
【发布时间】:2021-02-06 02:33:21
【问题描述】:

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

  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 中检查是否存在任何模式。我想知道有没有其他更好的方法来做到这一点?

【问题讨论】:

  • @RonakShah 我想找出特定 LR ID 到相同进程 ID 的最大和最小连续不间断序列。
  • @RonakShah 我添加了一些新行并提供了示例输出。让我知道这是否可以理解。

标签: r string string-comparison longest-substring contiguous


【解决方案1】:

我们可以使用

library(dplyr)
df1 %>% 
    count(LRID, grp = cumsum(ProcID != lag(ProcID, default = first(ProcID)))) %>%
    group_by(LRID) %>% 
    summarise(max = max(n) * 8, 
             min = min(n) * 8, .groups = 'drop')
# A tibble: 2 x 3
#   LRID   max   min
#  <int> <dbl> <dbl>
#1     1    16     8
#2     2    24     8

数据

df1 <- structure(list(LRID = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), Kmer = c("GTACGTAT", 
"TACGTATC", "ACGTATCG", "GTATCGTT", "GTTACGTA", "TTACGTAC", "TACGTACT", 
"ACGTACTT"), ProcID = c(10L, 10L, 2L, 3L, 16L, 16L, 16L, 11L)),
class = "data.frame", row.names = c(NA, 
-8L))

【讨论】:

    【解决方案2】:

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

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多