从背景(DNA序列)和​​改组(即从正DNA序列产生阴性组)中排除特定的字符串(DNA串)

时间:2014-11-17 08:38:39

标签: r string replace dna-sequence

我有包含DNA字符串的fasta文件。我想从正数据生成负数据集。一种方法是从我的数据中排除一些特定的序列,然后随机抽取数据 假设我的数据集是一个列表:

1)
DNAlst:
ACTATACGCTAATATCGATCTACGTACGATCG
CAGCAGCAGCGAGACTATCCTACCGCA
ATATCGATCGCAAAAATCG

我想排除这些序列:

ATAT,CGCA

所以结果将是:

ACTATACGCTACGATCTACGTACGATCG
CAGCAGCAGCGAGACTATCCTAC
CGATAAAAATCG

2)然后我想把我的序列按特定长度(例如5)洗牌。它意味着用长度为5的部分(5-mer)洗涤DNA串。例如:

ATATACGCGAAAAAATCTCTC => result after shuffle by 5 ==> AAAAACTCTCCGCAATATA

如果告诉我如何在R中这样做,我将感谢你。

1 个答案:

答案 0 :(得分:1)

使用stringi包:

dna <- c("ACTATACGCTAATATCGATCTACGTACGATCG","CAGCAGCAGCGAGACTATCCTACCGCA","ATATCGATCGCAAAAATCG")

# stri_replace function replaces strings ATAT and CGCA for empty string
stri_replace_all_regex(dna, "ATAT|CGCA","")

现在是洗牌部分。 seqstri_sub函数将非常有用。首先,我们需要削减&#39;我们的DNA seq成最多5个字符长的片段。 seq函数给我们起点

seq(1,24,5)
## [1]  1  6 11 16 21
seq(1,27,5)
## [1]  1  6 11 16 21 26 
来自长度为5的stri_sub生成的索引的

seq字符串

y <- stri_sub(dna[1], seq(from=1,to=stri_length(dna[1]),by=5), length = 5)
y
## [1] "ACTAT" "ACGCT" "AATAT" "CGATC" "TACGT" "ACGAT" "CG"   

sample将对我们的向量进行随机播放,stri_flatten将它们粘贴到一个字符串中。

stri_flatten(y[sample(length(y))])
## [1] "TACGTACGATCGATCAATATACGCTACTATCG"