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

如何批量处理数据框列,基于另一数据框生成分组统计汇总表?

批量实现基于数据框列筛选的分组汇总

需求说明

针对sites_df的每一列,提取该列的非NA唯一值,筛选compartments中Protein属于这些值的行,按compartment分组计数,最终合并为汇总表,需要批量处理替代手动逐列操作。

给定数据

1. sites_df数据框

生成代码:

set.seed(1)
sites_df <- data.frame(QC1 = sample(c(LETTERS[1:6],NA,NA), size =10, replace = T)
                       ,QC2 = sample(c(LETTERS[2:7],NA,NA), size =10, replace = T)
                       ,QC3 = sample(c(LETTERS[1:8],NA), size =10, replace = T))

数据展示:

> sites_df
    QC1  QC2  QC3
1     A    D <NA>
2     D    D    E
3  <NA>    B    E
4     A    F <NA>
5     B    F <NA>
6     E    C    E
7  <NA>    G    E
8     C    G    B
9     F    C <NA>
10    B <NA>    A

2. compartments数据框

生成代码:

set.seed(1)
compartments <- data.frame(Protein = sample((LETTERS[1:8]), size =20, replace = T)
                           ,compartment = paste0("comp", LETTERS[1:4])) %>% 
  unique()

数据展示:

> compartments
   Protein compartment
1        A       compA
2        D       compB
3        G       compC
4        A       compD
5        B       compA
6        E       compB
8        C       compD
9        F       compA
10       B       compB
11       C       compC
15       E       compC
16       B       compD
18       F       compB
19       B       compC
20       G       compD

批量处理实现方法

使用tidyverse工具集(dplyr+purrr)实现批量处理,步骤如下:

  1. 遍历sites_df的每一列,提取非NA唯一值;
  2. 针对每个列的筛选值,在compartments中筛选对应行并按compartment计数;
  3. 将各列的计数结果合并为汇总表,保留列名标识。

完整代码

library(tidyverse)

# 定义处理单列的函数
process_col <- function(col_data, col_name) {
  # 提取当前列的非NA唯一值
  valid_proteins <- col_data %>% na.omit() %>% unique()
  
  # 筛选compartments并分组计数
  compartments %>%
    filter(Protein %in% valid_proteins) %>%
    count(compartment, name = col_name)
}

# 批量处理所有列并合并结果
result_df <- sites_df %>%
  imap_dfr(process_col, .id = "QC_col") %>%
  pivot_wider(names_from = QC_col, values_from = starts_with("QC"), values_fill = 0)

# 查看结果
result_df

输出示例

运行代码后会得到如下格式的汇总表,每个QC列对应各compartment的计数:

# A tibble: 4 × 4
  compartment   QC1   QC2   QC3
  <chr>       <int> <int> <int>
1 compA           3     2     2
2 compB           2     3     2
3 compC           1     3     2
4 compD           2     2     1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:40:29