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

在R中用tidyverse筛选:至少2个组中有效值≥2的基因

基于tidyverse筛选符合条件的基因

需求说明

现有表格包含三列:基因(特征)、分组、有效值数量(notNA)。需要筛选出在至少2个分组中notNA≥2的基因,并输出以下信息:

  • 基因名
  • 有效分组总数(满足notNA≥2的分组数量)
  • 有效分组列表(用分号分隔满足条件的分组名)

示例数据

library(tidyverse)

df <- data.frame(
  gene = c('A', 'A', 'A', 'B','B','B', 'C','C','C'),
  group = c('a', 'b', 'c', 'a', 'b' ,'c', 'a', 'b' ,'c'),
  notNA = c(1, 2, 3, 1, 1, 2, 2, 3, 4)
)

# 预期输出结果
expected_result <- data.frame(
  gene = c('A', 'C'),
  total_valid_groups = c(2, 3),
  valid_groups = c('b;c', 'a;b;c')
)

tidyverse解决方案

result <- df %>%
  # 按基因分组,针对单个基因的所有分组数据进行处理
  group_by(gene) %>%
  # 筛选当前基因下notNA≥2的分组记录
  filter(notNA >= 2) %>%
  # 汇总有效分组的数量和列表
  summarise(
    total_valid_groups = n(),
    valid_groups = str_c(group, collapse = ";")
  ) %>%
  # 保留有效分组数≥2的基因
  filter(total_valid_groups >= 2) %>%
  # 取消分组状态,转换为普通数据框
  ungroup()

print(result)

代码解释

  • group_by(gene):按基因维度分组,确保后续操作只针对单个基因的分组数据
  • filter(notNA >= 2):筛掉当前基因下有效值数量不达标的分组
  • summarise(...):对每个基因的有效分组做统计,记录数量并拼接分组名称
  • filter(total_valid_groups >= 2):最终筛选出满足“至少2个有效分组”条件的基因
  • ungroup():解除分组状态,让结果回归标准数据框格式

运行后得到的结果与expected_result完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:35:08