通过比较 R 中的 kmers 找到连续性
Finding contiguity by comparing kmers in R
你好,我有一个如下所示的数据框:
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 进入不同的进程。我的 objective 是找到最长的不间断序列,该序列属于一个 LR ID,去往相同的目标 proc id。
我需要将一行的 (k-1) 个字符与下一行进行比较,依此类推。
我知道有这个函数叫
str_detect()
在 R 中检查是否存在任何模式。我想知道有没有其他更好的方法来做到这一点?
我们可以计算每个 LRID
中连续出现的 ProcID
并计算其中的最小值和最大值。
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]
我们可以使用
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))
你好,我有一个如下所示的数据框:
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 进入不同的进程。我的 objective 是找到最长的不间断序列,该序列属于一个 LR ID,去往相同的目标 proc id。 我需要将一行的 (k-1) 个字符与下一行进行比较,依此类推。
我知道有这个函数叫
str_detect()
在 R 中检查是否存在任何模式。我想知道有没有其他更好的方法来做到这一点?
我们可以计算每个 LRID
中连续出现的 ProcID
并计算其中的最小值和最大值。
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]
我们可以使用
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))