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

如何使用phyloseq将拆分的分组变量数据合并为单一变量?

解决phyloseq中子组合并为大分组的问题

这个问题在多人协作录入数据时特别常见,别担心,用phyloseq配合简单的分组映射就能轻松搞定,我给你一步步拆解:

1. 先定义子组到大分组的映射关系

首先你需要明确所有子组对应的大分组,把这个对应关系做成一个命名向量——名字是你的子组名称,值是对应的大分组:

# 定义子组 -> 大分组的映射
group_mapping <- c(
  red = "Red Wine",
  Red = "Red Wine",
  RedWine = "Red Wine",
  water = "Water",
  Water = "Water",
  white = "White Wine",
  White = "White Wine"
)

如果后续还有更多大小写变体(比如RED),可以先统一子组名称的大小写再做映射,避免遗漏:

# 先统一子组名称为小写(假设子组名是样本名或样本数据里的字段)
normalized_subgroups <- tolower(your_subgroup_vector)
# 调整映射为小写键
group_mapping <- c(
  red = "Red Wine",
  redwine = "Red Wine",
  water = "Water",
  white = "White Wine"
)

2. 将映射添加到phyloseq的样本数据中

假设你的phyloseq对象名为ps,先提取样本数据,然后添加新的大分组列:

# 提取样本数据
sam_data <- sample_data(ps)

# 情况1:子组是样本名(即phyloseq的样本名是red/Red这类)
sam_data$Total_Group <- group_mapping[rownames(sam_data)]

# 情况2:子组在样本数据的某一列(比如列名为Original_Group)
# 可以用dplyr的recode函数,或者base R的match
library(dplyr)
sam_data$Total_Group <- recode(sam_data$Original_Group, !!!group_mapping)

# 别忘了更新phyloseq对象的样本数据
sample_data(ps) <- sam_data

3. 检查映射是否完整

一定要确认所有子组都匹配到了大分组,避免遗漏:

# 找出未匹配到分组的样本
missing_samples <- rownames(sam_data)[is.na(sam_data$Total_Group)]
if (length(missing_samples) > 0) {
  warning("注意:以下样本未匹配到大分组,请检查映射:", paste(missing_samples, collapse = ", "))
}

4. 合并大分组的丰度数据

如果需要把同一大分组的样本丰度求和合并,用phyloseq自带的merge_samples函数:

# 按新的Total_Group分组合并样本,求和丰度
ps_merged <- merge_samples(ps, group = "Total_Group", fun = sum)

# 合并后样本名会变成大分组名称,你可以调整样本数据的标识
sample_data(ps_merged)$Sample_Group <- sample_names(ps_merged)

这样处理后,你的phyloseq对象就有了统一的大分组,后续分析(比如α多样性、β多样性或者差异分析)就能基于这些大分组来做啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:31:11