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

如何从phyloseq导出指定行列的CSV并合并分类单元名称?

生成SRS所需CSV文件的解决方案

方案一:直接从phyloseq对象提取处理

1. 提取核心数据组件

先把phyloseq对象里的样本、OTU和分类信息拆出来:

# 提取样本名称
sample_names <- rownames(sample_data(ps))
# 转置OTU表,让样本作为行,OTU作为列
otu_table_df <- as.data.frame(t(otu_table(ps)))
# 提取分类表并转为数据框格式
tax_table_df <- as.data.frame(tax_table(ps))

2. 合并分类等级为单列字符串

将域、门等7个分类等级用;连接成单个字符串:

# 按行合并所有分类等级,分隔符为;
tax_table_df$行为分类单元 <- apply(tax_table_df, 1, function(row) paste(row, collapse = ";"))
# 仅保留合并后的分类列
tax_table_df <- tax_table_df[, "行为分类单元", drop = FALSE]

3. 整合数据并导出CSV

把样本、OTU和分类信息关联,整理成SRS要求的两列格式:

library(tidyverse)

# 将OTU表转为长格式,匹配每个样本对应的OTU
otu_long <- otu_table_df %>%
  rownames_to_column(var = "样本") %>%
  pivot_longer(cols = -样本, names_to = "OTU_ID", values_to = "丰度")

# 关联分类信息
taxonomy_long <- tax_table_df %>%
  rownames_to_column(var = "OTU_ID")

# 合并后仅保留需要的列
final_data <- otu_long %>%
  left_join(taxonomy_long, by = "OTU_ID") %>%
  select(样本, 行为分类单元)

# 导出CSV文件
write.csv(final_data, "SRS_input.csv", row.names = FALSE, fileEncoding = "UTF-8")

方案二:基于psmelt结果修改

如果已经用psmelt导出了全量数据,直接处理现有结果更快捷:

# 生成psmelt结果
melted_ps <- psmelt(ps)

# 合并分类等级列(默认使用tax_table的原有列名,无需手动指定)
melted_ps$行为分类单元 <- apply(
  melted_ps[, colnames(tax_table(ps))], 
  1, 
  function(row) paste(row, collapse = ";")
)

# 筛选出需要的列
final_data <- melted_ps %>%
  select(样本 = Sample, 行为分类单元)

# 导出CSV
write.csv(final_data, "SRS_input.csv", row.names = FALSE, fileEncoding = "UTF-8")

关键提示

  • 如果分类表存在NA值,先执行tax_table(ps)[is.na(tax_table(ps))] <- "Unclassified"替换,避免合并后出现空值
  • 若SRS不需要丰度信息,在处理过程中直接剔除相关列即可
  • 样本列的名称可根据实际数据调整,确保与你的样本命名规则一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:22:48