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

如何为phyloseq对象指定自定义分类阶元的数量与名称?

解决PR2数据库分类阶元与phyloseq默认设置不匹配的问题

问题根源在于qza_to_phyloseq默认按7个标准分类阶元(Kingdom-Phylum-Class-Order-Family-Genus-Species)解析数据,但PR2数据库的9阶元体系(Domain-Supergroup-Division-Subdivision-Class-Order-Family-Genus-Species)和它不匹配,导致阶元错位、部分分类信息缺失。直接用默认函数无法正确识别PR2的分类结构,需要手动拆分并构建分类表,再组合成phyloseq对象。

步骤1:加载依赖包并读取原始QIIME2文件

确保已安装qiime2R和tidyverse包:

install.packages(c("qiime2R", "tidyverse"))
library(qiime2R)
library(tidyverse)

读取分类学、特征表和元数据文件:

# 读取分类学数据
taxonomy_raw <- read_qza("taxonomy.qza")$data
# 读取特征表
otu_raw <- read_qza("features.qza")$data
# 读取元数据
metadata_raw <- read_qza("metadata.qza")$data

步骤2:处理分类学数据,适配PR2的9阶元体系

拆分分类列并清理格式:

# 拆分分号分隔的分类字符串为9个对应列
tax_table_processed <- separate(
  taxonomy_raw, 
  Taxon, 
  into = c("Domain", "Supergroup", "Division", "Subdivision", "Class", "Order", "Family", "Genus", "Species"), 
  sep = ";"
)

# 移除分类阶元前缀(如PR2中常见的d__、sg__等标记)
tax_table_processed <- tax_table_processed %>%
  mutate(across(
    c(Domain, Supergroup, Division, Subdivision, Class, Order, Family, Genus, Species),
    ~str_remove(., "^.*__")
  ))

# 转换为phyloseq要求的tax_table格式(行名为Feature.ID)
tax_table_final <- tax_table_processed %>%
  column_to_rownames("Feature.ID") %>%
  as.matrix() %>%
  tax_table()

步骤3:转换特征表和元数据为phyloseq格式

# 转换特征表为otu_table(注意确认taxa_are_rows参数,QIIME2输出默认特征是行)
otu_table_final <- otu_table(otu_raw, taxa_are_rows = TRUE)

# 转换元数据为sample_data
sample_data_final <- sample_data(metadata_raw)

步骤4:构建最终的phyloseq对象

ps <- phyloseq(otu_table_final, tax_table_final, sample_data_final)

验证结果

查看分类表的前几行,确认所有9个阶元都正确加载:

head(tax_table(ps))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:35:10