如何从Phyloseq对象中抽取指定大小的随机样本
解决Phyloseq对象随机抽样的可行方案
方案1:直接操作Phyloseq对象(最优解)
无需转换格式,直接通过样本名筛选实现抽样,能完整保留原对象结构:
- 提取所有样本名:
sample_names <- sample_names(your_phyloseq_obj) - 随机抽取n个样本名:
selected_samples <- sample(sample_names, size = n) - 修剪对象保留选中样本:
sampled_phyloseq <- prune_samples(selected_samples, your_phyloseq_obj)
如果原对象包含进化树(phy_tree),该方法会自动同步修剪树结构,无需额外操作。
方案2:转数据框抽样后重建Phyloseq对象(备用)
若必须通过数据框操作,按以下步骤执行:
拆分原对象组件
- 提取OTU表:
otu_df <- as.data.frame(otu_table(your_phyloseq_obj)) - 提取样本信息:
sample_df <- as.data.frame(sample_data(your_phyloseq_obj)) - 提取分类注释表(若有):
tax_df <- as.data.frame(tax_table(your_phyloseq_obj)) - 随机选择目标样本名:
selected_samples <- sample(rownames(sample_df), size = n)
筛选组件并重建对象
- 筛选OTU表:
sampled_otu <- otu_df[, selected_samples] - 筛选样本信息:
sampled_sample <- sample_df[selected_samples, ] - 转换回Phyloseq原生格式并组合:
# 重建OTU表,注意taxa_are_rows需与原对象一致,可通过taxa_are_rows(your_phyloseq_obj)查看 new_otu <- otu_table(sampled_otu, taxa_are_rows = TRUE) # 重建样本信息 new_sample <- sample_data(sampled_sample) # 重建分类注释表(若原对象有) new_tax <- tax_table(as.matrix(tax_df)) # 组合为新Phyloseq对象 sampled_phyloseq <- phyloseq(new_otu, new_sample, new_tax) - 若原对象包含进化树,需额外修剪并加入:
new_tree <- prune_taxa(taxa_names(new_otu), phy_tree(your_phyloseq_obj)),将new_tree加入上述phyloseq()的参数列表即可。
内容的提问来源于stack exchange,提问作者Detr4
相关产品推荐
相关产品推荐

