在 R 中比较 fasta 文件与 tsv 文件

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

我有一个像这样的fasta文件:

>IGHV6-22_F
GTTTGAATGGCCAGGC...
>IGHV1-21_F
GTGCAGATGGTCAGAC...
>IGHV3-20_F
GTGTGAAGGGTGAACA...
>IGHV3-18_F

还有一个像这样的 tsv 文件:

    df.allVHitsWithScore    n
    IGHV1-11-P              1
    IGHV1-11-P,IGHV1-21-F   1317
    IGHV1-13-P              6524
    IGHV1-16-ORF,IGHV1-21-F 11
    IGHV1-16-ORF,IGHV1-8-F  9
    IGHV1-21-F              2081

我想在 R 中创建一个脚本(如果可能),对于 tsv 文件中的每一行,我检查该段是否在 fasta 文件中。这适用于 tsv 文件的每一行。对于有两段的行,分别检查每一段。

最后,我想知道 fasta 文件中的所有段是否都存在于 tsv 文件中。 在 R 中可以做到这一点吗?

提前谢谢您!

r csv row fasta
1个回答
0
投票

所以我认为为了读取 fasta 文件,您将需要命令 readlines。 然后你必须按照步骤 2 遍历这些行:

fasta_data=readlines('in.fa',warn=F)
seq_dataframe=data.frame()
for(i in seq(1:length(fasta_data),2)){
    id=fasta_data[i]
    seq_data=data[i+1]
    seq_dataframe=rbind(seq_dataframe,cbind(id,seq_data))
}
colnames(seq_dataframe)=c('ID','sequence')

上面的方法很慢,但它可以完成工作。如果您想让速度更快,请考虑使用向量来子集数据。 至于另一个文件,您需要将具有 2 个 ID 的行分成不同的行。

tsv=read.table('in.tsv',stringsAsFactors=F,header=T)
tsv_data=data.frame()
for(i in 1:nrow(tsv)){
    if(grepl(pattern=',',tsv$df.allVHitsWithScore[i])){
        split_ids=unlist(strsplit(tsv$df.allVHitsWithScore[i],","))
              tsv_data=rbind(tsv_data,cbind(split_ids,tsv$n))
    }else{
              tsv_data=rbind(tsv_data,cbind(tsv$df.allVHitsWithScore[i],tsv$n))
    }

}
colnames(tsv_data)=c('IDs','n')

这将为您提供 2 个可以比较的数据帧 - 我还没有测试过这段代码。

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