r - 通过比较 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 中检查是否存在任何模式。我想知道有没有其他更好的方法来做到这一点?
解决方案
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]
推荐阅读
- scala - 矩阵中的火花循环以运行线性回归
- swift - 如何使用 cocoapods 避免多项目工作区中的类重复
- javascript - 画廊功能的模型图像不能用于许多图像
- python - 如何将 UTC 24 小时时间转换为另一个时区?(Python)
- python - 如何解决 write_audiofile 中的moviepy错误?
- swift - 制作反向迭代器
- android - Genymotion 不能在两个相同的设备上工作?
- r - 根据 R 中第二个 df 的条件进行平均
- flutter - 如何将 MaterialPageRoute 传递给 Widget
- python - python巨大的性能差异数组迭代与“if in”