【问题标题】:excluding specific strings (DNA string) from background (DNA sequence) and shuffling (i.e. generating negative set from positive DNA sequence)从背景(DNA 序列)中排除特定字符串(DNA 字符串)和改组(即从正 DNA 序列生成负集)
【发布时间】:2014-11-17 08:38:39
【问题描述】:

我有包含 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 中执行此操作,我将不胜感激。

【问题讨论】:

  • 一个简单的gsub 可以做第一部分,比如gsub("ATAT|CGCA", "", "CAGCAGCAGCGAGACTATCCTACCGCA") 虽然我不确定你是什么数据结构dput(DNAlst) 可能有用

标签: r string replace dna-sequence


【解决方案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 函数将很有用。首先,我们需要将我们的 DNA 序列“切割”成最多 5 个字符长的片段。 seq 函数为我们提供了起点

seq(1,24,5)
## [1]  1  6 11 16 21
seq(1,27,5)
## [1]  1  6 11 16 21 26 

stri_sub 来自seq 生成的长度为 5 的索引的字符串

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"

【讨论】:

    猜你喜欢
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多