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

R语言:如何对各团队DataFrame应用多步过滤并汇总计数结果?

问题

我有一个大型DataFrame:

df <- data.frame(teams=sample(LETTERS,1000,replace=TRUE),type=sample(1:15,1000,replace=TRUE))

需要对每个团队应用一套包含多步骤、基于特定行序列的复杂过滤(原DataFrame含datetime字段,需使用lag和lead函数清洗结果,因此必须独立处理每个团队)。简化示例如下:

df1 <- df %>%
  filter(team == "A")

result1 <- df1 %>%
  filter(type == 3 & type == 10)

result2 <- df1 %>%
  filter(type == 6 & type == 12)

目标是对所有团队执行相同过滤逻辑,统计各结果的行数,并汇总成如下格式的DataFrame:

Teamresult1result2
A126
B82
C5010
解决方案

可以借助dplyr的分组机制,把每个团队的逻辑处理和统计整合到一起,无需单独拆分每个团队:

基础版(简单过滤条件)

library(dplyr)

final_result <- df %>%
  group_by(teams) %>%
  summarise(
    result1 = sum(type == 3 & type == 10),  # 统计符合result1条件的行数
    result2 = sum(type == 6 & type == 12),  # 统计符合result2条件的行数
    .groups = "drop"  # 取消分组,返回普通DataFrame
  )

# 查看结果
final_result

进阶版(含lag/lead等行顺序依赖逻辑)

如果你的实际过滤需要用到lag/lead这类依赖行顺序的操作,可以先在分组内完成数据清洗,再统计:

final_result <- df %>%
  group_by(teams) %>%
  # 先执行依赖行序列的清洗逻辑,以下为示例(替换成你的实际逻辑)
  mutate(
    # 示例:当前行type为3且下一行type为10
    meets_result1 = type == 3 & lead(type) == 10,
    # 示例:当前行type为6且下一行type为12
    meets_result2 = type == 6 & lead(type) == 12
  ) %>%
  summarise(
    result1 = sum(meets_result1, na.rm = TRUE),  # 统计符合条件的行数,忽略NA
    result2 = sum(meets_result2, na.rm = TRUE),
    .groups = "drop"
  )

运行后就能得到你需要的按团队汇总的统计结果,格式完全匹配要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:07:32