【问题标题】:Trying to generate ASV table from phyloseq尝试从 phyloseq 生成 ASV 表
【发布时间】:2022-09-27 14:19:02
【问题描述】:

我承认大多数人都有相反的问题。但是我正在尝试创建一个 ASV 表,其列名称为“已识别的 OTU”(又名列名称来自 GlobalPatterns@tax.table 的分类信息,而不仅仅是分配的 OTU 代码编码为GlobalPatterns@otu.table),行名作为样本名。

我还想将元数据附加到 ASV 表的末尾,以允许基于所述元数据进行分析。

我设法生成了一个表没有使用此代码的分类信息,使用 GlobalPatterns 进行重现性:

data(GlobalPatterns)
asv.matrix <- as.matrix(GlobalPatterns@otu_table@.Data)
asv <- data.frame(t(asv.matrix))                                   #transposing to make sample name the row name
meta.df <- as.data.frame(GlobalPatterns@sam_data)
asv.full <- data.frame(asv,meta.df)
write.csv(asv.full, file = \"full_asv.csv\",quote = FALSE,sep = \",\")

但是,我无法弄清楚如何将分类信息强制写入列名,这使得 ASV 表在功能上对分析毫无用处。

编辑: 我的首选格式如下(缩写为附加伪造的元数据)。试图创建一个表,失败了,有一个假的代码块。

Sample-ID / Species1 / Species2 / ...etc... / Metadata1 / Metadata2 /...etc... /
--------- / -------- / -------- / --------- / --------- / --------- /--------- /
Sample1   / 1        / 5        / ...etc... / lake      / summer    /...etc... /
Sample2   / 4        / 0        / ...etc... / bog       / spring    /...etc... /
  • 决定只使用as.data.frame(GlobalPatterns@tax.table) 单独提取分类数据,并让我的顾问弄清楚如何将两者联系起来。处理我的分类数据并非全部“解析”到同一级别变得越来越混乱。

标签: r phyloseq


【解决方案1】:

我认为您正在寻找phyloseq::psmelt 函数,它将otu_tabletax_tablesample_data 表组合成一个适合分析的单个长格式表。

处理未解决的分类法的一种方法是将已知的最高分类法分配给任何未解决的级别。在使用psmelt 之前,您可以使用fantaxtic 包中的name_na_taxa 函数。

编辑

看到您更新的帖子后,我对您想要的内容有所了解。您可以从psmelt 获取输出并将其转换为半宽格式;请参阅下面的代码块。

require("phyloseq")
require("fantaxtic")
require("tidyverse")

# Load data
data(GlobalPatterns)

# Generate (unique) species names using fantaxtic
ps <- name_na_taxa(GlobalPatterns)
ps <- label_duplicate_taxa(ps, tax_level = "Species", asv_as_id = T)

# Convert to long data format
ps_long <- psmelt(ps)

# Convert to semi-wide data format where each column has a taxon name
# and contains the abundance in each sample
meta_vars <- sample_variables(ps)
ps_wide <- ps_long %>%
  select(all_of(meta_vars), Species, Abundance) %>%
  pivot_wider(names_from = Species,
              values_from = Abundance)

# Inspect the final table
head(ps_wide)
#> # A tibble: 6 x 19,223
#>   X.SampleID Primer  Final_Barcode Barcode_truncate~ Barcode_full_le~ SampleType
#>   <fct>      <fct>   <fct>         <fct>             <fct>            <fct>     
#> 1 AQC4cm     ILBC_17 ACAGCT        AGCTGT            CAAGCTAGCTG      Freshwate~
#> 2 LMEpi24M   ILBC_13 ACACTG        CAGTGT            CATGAACAGTG      Freshwater
#> 3 AQC7cm     ILBC_18 ACAGTG        CACTGT            ATGAAGCACTG      Freshwate~
#> 4 AQC1cm     ILBC_16 ACAGCA        TGCTGT            GACCACTGCTG      Freshwate~
#> 5 M31Tong    ILBC_10 ACACGA        TCGTGT            TGTGGCTCGTG      Tongue    
#> 6 M11Fcsw    ILBC_05 AAGCTG        CAGCTT            CGACTGCAGCT      Feces     
#> # ... with 19,217 more variables: Description <fct>,
#> #   `Unknown Stramenopiles (Order) 549656` <dbl>,
#> #   `Unknown Dolichospermum (Genus) 279599` <dbl>,
#> #   `Unknown Neisseria (Genus) 360229` <dbl>,
#> #   `Unknown Bacteroides (Genus) 331820` <dbl>,
#> #   `Haemophilusparainfluenzae 94166` <dbl>,
#> #   `Unknown ACK-M1 (Family) 329744` <dbl>, ...

reprex package (v2.0.1) 于 2022 年 9 月 26 日创建

请注意,这可能会导致一个包含数千列的表(在GlobalPatterns 的情况下约为 20k),这可能很难处理。

【讨论】:

  • 实际上,不,不幸的是。这种方法让我得到了一张 1400 万行的 Excel 表格,并且拒绝通过电子邮件发送和在普通计算机上打开,而且这也不是我的顾问的首选格式。我将使用首选表格格式编辑上述内容;不是我忘记包括在内的最明亮的时刻。
  • 不过,请注意 name_na_taxa 函数。谢谢你的提示。
  • 感谢更新表格格式。我已经更新了我的帖子。
猜你喜欢
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 2016-03-16
  • 1970-01-01
  • 2019-02-06
相关资源
最近更新 更多