我有一个像这样的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 中可以做到这一点吗?
提前谢谢您!
所以我认为为了读取 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 个可以比较的数据帧 - 我还没有测试过这段代码。