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

如何在R中按属/科分组合并行并批量汇总样本列值?

需求:按分类层级(属/科)批量汇总样本列读数

现有包含约80个Sample列的R语言dataframe,需无需逐个指定样本名,按**属(Genus)或科(Family)**列分组,合并对应行并汇总所有Sample列的原始读数。此前参考的方案仅支持单列值的合并汇总,无法满足批量处理需求。

示例数据

df <- data.frame(OTU_ID = c(123,456,789,101,102,232,221),
                 Kingdom = rep(c("Viridiplantae"),7),
                 Phylum = rep(c("Streptophyta"),7),
                 Class = rep(c("Magnoliopsida"),7),
                 Order = c("Asterales","Asterales","Fabales","Fabales","Dipsacales","Asterales","Fabales"),
                 Family = c("Asteraceae","Asteraceae","Fabaceae","Fabaceae","Caprifoliaceae","Asteraceae","Fabaceae"),
                 Genus = c("Gymnanthemum","Gymnanthemum","Trifolium","Trifolium","Hypericum","Felicia","Trifolium"),
                 Species = c("amygdalinum","amygdalinum","pannonicum","pratense","perforatum","heterophylla","pannonicum"),
                 Sample1 = c(436,0,0,1167,37704,0,0),
                 Sample2 = c(1146,0,0,285,38489,0,0),
                 Sample3 = c(19547,0,0,87,13732,0,0),
                 Sample4 = c(564,0,0,0,34821,0,0),
                 Sample5 = c(579,0,0,0,0,17632,0),
                 Sample6 = c(0,366,50,0,0,30457,100))

数据展示:

OTU_ID       Kingdom       Phylum         Class      Order         Family        Genus      Species Sample1 Sample2 Sample3
1    123 Viridiplantae Streptophyta Magnoliopsida  Asterales     Asteraceae Gymnanthemum  amygdalinum     436    1146   19547
2    456 Viridiplantae Streptophyta Magnoliopsida  Asterales     Asteraceae Gymnanthemum  amygdalinum       0       0       0
3    789 Viridiplantae Streptophyta Magnoliopsida    Fabales       Fabaceae    Trifolium   pannonicum       0       0       0
4    101 Viridiplantae Streptophyta Magnoliopsida    Fabales       Fabaceae    Trifolium     pratense    1167     285      87
5    102 Viridiplantae Streptophyta Magnoliopsida Dipsacales Caprifoliaceae    Hypericum   perforatum   37704   38489   13732
6    232 Viridiplantae Streptophyta Magnoliopsida  Asterales     Asteraceae      Felicia heterophylla       0       0       0
7    221 Viridiplantae Streptophyta Magnoliopsida    Fabales       Fabaceae    Trifolium   pannonicum       0       0       0
  Sample4 Sample5 Sample6
1     564     579       0
2       0       0     366
3       0       0      50
4       0       0       0
5   34821       0       0
6       0   17632   30457
7       0       0     100

期望结果(按属分组)

Kingdom         Phylum          Class           Order       Family          Genus           Sample1    Sample2      Sample3     Sample4      Sample5       Sample6
Viridiplantae   Streptophyta    Magnoliopsida   Asterales   Asteraceae      Gymnanthemum    436         1146        19547       564          579           366
Viridiplantae   Streptophyta    Magnoliopsida   Fabales     Fabaceae        Trifolium       1167        285          87         0             0             150
Viridiplantae   Streptophyta    Magnoliopsida   Dipsacales  Caprifoliaceae  Hypericum       37704       38489       13732       34821         0             0
Viridiplantae   Streptophyta    Magnoliopsida   Asterales   Asteraceae      Felicia         0           0           0           0             17632         30457

解决方案

使用dplyr包的across()函数可以批量匹配所有Sample列,无需逐个指定列名,高效完成分组汇总:

1. 按属(Genus)分组汇总

library(dplyr)

df_genus <- df %>%
  # 按分类层级分组(确保同一属的分类信息一致)
  group_by(Kingdom, Phylum, Class, Order, Family, Genus) %>%
  # 对所有以Sample开头的列求和
  summarise(across(starts_with("Sample"), sum), .groups = "drop")

2. 按科(Family)分组汇总

df_family <- df %>%
  # 按科及以上分类层级分组
  group_by(Kingdom, Phylum, Class, Order, Family) %>%
  summarise(across(starts_with("Sample"), sum), .groups = "drop")

说明:

  • starts_with("Sample")会自动匹配所有列名以Sample开头的列,无论有多少个样本列都能批量处理;
  • .groups = "drop"用于取消分组状态,返回普通dataframe格式;
  • 分组时包含Kingdom到对应层级的列,是为了保留完整的分类路径信息(同一属/科的这些分类信息是一致的)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:07:05