如何为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
相关产品推荐
相关产品推荐

