逐对序列分析-查找唯一组合的索引

问题描述 投票:-1回答:1

我有大量DNA序列{A,C,T,G}(总共100,000个列表,每个列表3000个字符)。我需要成对分析这些列表,从第一个列表开始,然后将其与第二个,第三个,第四个,...,第100,000个进行比较。然后转到第二个列表,并将其与第三,第四,...,第100,000个等进行比较。

在每个成对比较中,我需要找到元素的唯一组合的索引。例如:

List1 =“ A”,“ C”,“ A”,“ G”,“ T”,“ A”,“ C”,“ T”,“ C”。

List2 =“ A”,“ G”,“ G”,“ G”,“ C”,“ A”,“ G”,“ G”,“ C”。

我想要的输出是:

AA = {1,6}

CG = {2,7}

AG = {3}

GG = {4}

TC = {5}

TG = {8}

CC = {9}

我已经尝试使用Rcppfor循环和if/else语句对此进行编码,但是事实证明它相当慢。使用R之类的apply, unique, etc.功能似乎执行得更慢!我什至尝试使用Integers对这些字符进行编码,但没有发现任何改进。

只是想知道是否有人可以想到一种更快的方法...

谢谢!

r sorting rcpp dna-sequence pairwise
1个回答
0
投票

假设它们实际上是列表,您可以执行类似操作

library(data.table)
Df <- data.table(list1, list2) 
Df[, .(str = factor(paste0(list1, list2)), 
       row = seq(.N))][, .(str, 
                          paste0(row, collapse = ',')), #collapse ID
                         by = str] 

对于每个列表对,然后合并结果。

© www.soinside.com 2019 - 2024. All rights reserved.