如何解决通过比较 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,它们让 kmer 进入不同的进程。我的目标是找到属于一个 LR ID 的最长不间断序列,该序列到达相同的目标 proc id。 我需要将一行的 (k-1) 个字符与其下一行进行比较,依此类推。
我知道有个函数叫做
str_detect()
在 R 中检查是否存在任何模式。我想知道有没有其他更好的方法来做到这一点?
解决方法
我们可以计算每个 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]
,
我们可以使用
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,2L,2L),Kmer = c("GTACGTAT","TACGTATC","ACGTATCG","GTATCGTT","GTTACGTA","TTACGTAC","TACGTACT","ACGTACTT"),ProcID = c(10L,10L,3L,16L,11L)),class = "data.frame",row.names = c(NA,-8L))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。