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

在R语言中如何依据组内首行值过滤完整分组?

问题:按分组移除首行gameplayed为No的组

我有一个data frame,希望按team列分组后,移除所有组内首行gameplayed列值为No的完整分组。

示例数据集

df <- data.frame(team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'D', 'D', 'D', 'E', 'E'), gameplayed=c('Yes', 'No', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes'))

期望输出

df2 <- data.frame(team=c('A', 'A', 'A', 'A', 'C', 'D', 'D', 'D'), gameplayed=c('Yes', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'No', 'Yes'))

尝试过的代码(未成功)

df %>% group_by(team) %>% filter("Yes" == first(gameplayed))

解决方案

你的代码逻辑方向是对的,调整写法并补充ungroup()即可得到目标结果:

library(dplyr)

df %>%
  group_by(team) %>%
  filter(first(gameplayed) == "Yes") %>%
  ungroup()

说明

  1. first(gameplayed) == "Yes":针对每个分组,判断组内首行的gameplayed值是否为Yes,满足条件的分组会被完整保留
  2. ungroup():将分组后的结果转回普通data frame,和你期望的df2结构一致

如果原代码报错,大概率是first()函数被其他包的同名函数覆盖,改用指定包名的写法可以避免这个问题:

df %>%
  group_by(team) %>%
  filter(dplyr::first(gameplayed) == "Yes") %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:55:17