从DADA2 Pipeline过渡到Phyloseq:构建样本data.frame遇阻求助
解决DADA2到Phyloseq过渡的元数据关联问题
Hey there! Let's break this down step by step since you've already got most of the pieces in place to get your metadata linked up for Phyloseq.
首先:你的核心需求的简单解决方案
你已经手动创建了trtmt向量对应每个样本的处理组,而且你的样本名(193、194等)里并没有编码处理组信息,所以完全不需要照搬教程里的strsplit逻辑(那是针对教程里带编码的小鼠样本名设计的)。
直接用你现有的samples.out和trtmt构建正确的元数据框就好:
# 基于已有的样本名和处理组向量构建元数据data.frame samdf <- data.frame( Sample = samples.out, Treatment = trtmt, row.names = samples.out # 关键:确保行名和otu表(seqtab.nochim)的行名完全一致 ) # 检查一下结构是否正确(前几行) head(samdf)
这样得到的samdf就是Phyloseq需要的样本元数据格式,后续整合的时候,Phyloseq会通过行名自动关联otu表和元数据。
解释你困惑的教程代码细节
你提到的教程里的代码是针对特定样本命名规则设计的,和你的数据无关,所以不用纠结:
"D":教程里的小鼠样本名是类似M1D0、F3D100这样的格式,D是天数的分隔符,用来拆分出小鼠ID和采样天数。你的样本名里没有这个字符,所以完全不需要用这个逻辑。`[`:这是R里的取元素函数的写法。strsplit返回的是一个列表,sapply(strsplit(...),[, 1)的意思是:遍历列表里的每一个元素(每个样本名拆分后的结果),用[函数取出第1个部分。举个例子,如果样本名是M1D0,拆分后是c("M1", "0"),取第1个就是"M1"。
修正你之前尝试的问题
你之前用cbind把samples.out和trtmt合并,得到的是一个矩阵而不是data.frame,而且没必要多此一举。直接用data.frame()构建并设置行名,是更简洁且符合Phyloseq要求的方式。
最后:整合到Phyloseq
确认samdf的行名和seqtab.nochim的行名(样本名)完全匹配后,就可以构建Phyloseq对象了:
library(phyloseq) # 将otu表转为phyloseq的otu_table对象(注意taxa_are_rows=FALSE,因为你的seqtab.nochim是样本行,物种列) otu_tab <- otu_table(seqtab.nochim, taxa_are_rows = FALSE) # 将元数据转为sample_data对象 sample_dat <- sample_data(samdf) # 合并为phyloseq对象 ps <- phyloseq(otu_tab, sample_dat)
这样就完成了从DADA2到Phyloseq的过渡啦!
内容的提问来源于stack exchange,提问作者Aurora Patchett
相关产品推荐
相关产品推荐

