我有包含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中这样做,我将感谢你。
答案 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","")
现在是洗牌部分。 seq
和stri_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"