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

如何利用phyloseq的GlobalPatterns生成带分类信息与元数据的ASV表

生成带分类信息列名的ASV表并合并元数据

核心解决思路

要将GlobalPatterns@tax.table中的分类信息替换默认OTU编码作为列名,同时保留样本为行、末尾追加元数据,需先处理分类信息(避免重复列名),再替换OTU表列名,最后合并元数据。

完整代码实现

# 加载数据集
data(GlobalPatterns)

# 提取OTU计数矩阵并转置(样本为行,OTU为列)
asv_matrix <- t(as.matrix(GlobalPatterns@otu_table@.Data))

# 提取分类信息表,生成可用的分类标识
tax_table <- as.data.frame(GlobalPatterns@tax_table)
# 优先取最细分类层级(如种),空值则向上取层级,全空则保留原OTU编码
tax_labels <- apply(tax_table, 1, function(x) {
  for (level in rev(colnames(tax_table))) {
    if (!is.na(x[level]) && x[level] != "") {
      return(x[level])
    }
  }
  return(names(x))
})

# 处理重复分类名:给重复项加后缀避免列名冲突
tax_labels <- make.unique(tax_labels, sep = "_")

# 替换OTU矩阵的列名为分类信息
colnames(asv_matrix) <- tax_labels

# 转换为数据框并合并元数据
asv_df <- data.frame(Sample_ID = rownames(asv_matrix), asv_matrix, check.names = FALSE)
meta_df <- as.data.frame(GlobalPatterns@sam_data)
asv_full <- merge(asv_df, meta_df, by.x = "Sample_ID", by.y = "X.SampleID")

# 导出CSV文件
write.csv(asv_full, file = "full_asv_with_tax.csv", quote = FALSE, row.names = FALSE)

代码说明

  • 分类信息提取:遍历每个OTU的分类层级,优先取最具体的分类(如种),避免空值;若所有层级为空则保留原OTU编码。
  • 重复列名处理:用make.unique给重复分类名加后缀,防止数据框列名冲突。
  • 元数据合并:通过样本ID匹配合并,确保样本与元数据一一对应,避免行序混乱。
  • 导出设置:row.names = FALSE避免导出多余行号,check.names = FALSE保留分类名中的特殊字符(如括号、空格)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:35:31