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

如何用tidyverse的group_by函数批量统计各组符合条件的Key数量

解决方案:用tidyverse分组统计符合条件的Key数量

我明白你现在的需求是按Group分组,统计每组中至少有一个样本值符合条件的Key数量,之前你是分两组单独处理的,现在想用tidyverse的group_by一次性搞定对吧?下面给你完整的实现方案:

核心代码实现

首先加载tidyverse包,然后用分组+汇总的方式完成统计:

library(tidyverse)

input <- tribble(
  ~Key, ~Group, ~sample1, ~sample2, ~sample3, ~samplen,
  "a1", "ABC", 0, 0.1, 0.2, 0,
  "a2", "ABC", 1, 2, 3, 0,
  "a3", "DEF", 0, 0, 0, 0,
  "a4", "DEF", 2, 22, 23, 2,
  "a5", "DEF", 0, 0, 0.1, 0
)

# 按条件统计(匹配你的期望输出:样本值严格>0.1)
result <- input %>%
  group_by(Group) %>%
  # 对每个Key,检查是否有至少一个样本值>0.1,统计符合条件的数量
  summarise(qualified_keys = sum(if_any(starts_with("sample"), ~ .x > 0.1))) %>%
  ungroup()

print(result)

输出结果

运行代码后会得到你期望的输出:

# A tibble: 2 × 2
  Group qualified_keys
  <chr>          <int>
1 ABC                2
2 DEF                1

代码解释

  • group_by(Group):按Group列分组,后续操作在每个组内独立执行;
  • if_any(starts_with("sample"), ~ .x > 0.1):
    • starts_with("sample")自动匹配所有以sample开头的样本列,不用手动指定列名;
    • if_any检查每个Key对应的样本列中,是否至少有一个满足>0.1的条件,返回布尔值(TRUE/FALSE);
  • sum(...):布尔值会被自动转换为1(TRUE)和0(FALSE),求和后直接得到每组符合条件的Key数量;
  • ungroup():可选操作,取消分组状态,方便后续对结果进行其他处理。

如果你的实际需求是样本值≥0.1,只需要把代码中的> 0.1改成>= 0.1即可,此时DEF组的结果会变成2(因为a5的sample3值为0.1,符合条件)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:38:17