在R中将制表符与换行符分隔的字符向量列表res转换为dataframe
R中将BLAST输出列表转换为结构化DataFrame的方法
实现思路
你的res是BLASTP输出的原始文本列表,我们需要先过滤空值、拆分文本行,再提取查询序列(Query)信息、拆分制表符分隔的比对结果字段,最终合并为结构化表格。
基于tidyverse的实现(推荐,代码简洁)
首先加载依赖包:
library(tidyverse)
执行转换代码:
# 预处理:过滤空元素并拆分每一行文本 raw_lines <- res %>% discard(~.x == "") %>% # 移除列表中的空字符串元素 str_split("\n") %>% # 按换行符拆分单条长文本为多行 unlist() %>% discard(~.x == "") # 移除拆分后产生的空行 # 转换为dataframe blast_result <- tibble(line = raw_lines) %>% # 提取Query完整名称,空缺值向下填充 mutate( query = str_match(line, "^# Query: (.*?) OS=")[,2], # 可根据需求调整Query的提取范围 is_comment = str_starts(line, "#"), is_hit_line = !is_comment ) %>% fill(query, .direction = "down") %>% # 仅保留比对结果行,过滤注释行 filter(is_hit_line) %>% # 按制表符拆分4个比对字段,自动转换为数值格式 separate( col = line, into = c("subject_id", "evalue", "query_coverage_pct", "identity_pct"), sep = "\t", convert = TRUE ) %>% # 移除辅助计算列 select(-is_comment, -is_hit_line)
输出说明
最终得到的blast_result就是符合要求的dataframe,包含5个字段:
query:比对的查询序列名称subject_id:比对到的参考序列IDevalue:比对E值query_coverage_pct:查询序列覆盖度(%)identity_pct:序列一致性(%)
内容的提问来源于stack exchange,提问作者accibio
相关产品推荐
相关产品推荐

