You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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:比对到的参考序列ID
  • evalue:比对E值
  • query_coverage_pct:查询序列覆盖度(%)
  • identity_pct:序列一致性(%)

内容的提问来源于stack exchange,提问作者accibio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:24:03