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

如何用R语言dplyr按组保留含最新年份数据的所有行?

筛选包含指定年份分组的所有行(dplyr实现)

需求:若数据中name列的分组(A、B、C、D)包含year列值为2021的行,则保留该分组的所有行;否则删除该分组的全部行。

示例数据

name <- c("A","A","A","B","B","C","C","C","D","D","D","D")
year <- c(2018,2019,2020,2018,2019,2019,2020,2021,2018,2019,2020,2021)
col <- c(2,1,5,6,7,5,7,3,7,9,1,4)

# 注意:cbind生成的是矩阵,转成数据框并修正数据类型
df <- as.data.frame(cbind(name,year,col))
df$year <- as.numeric(df$year)
df$col <- as.numeric(df$col)

解决方案

不需要额外的Count类变量,直接用dplyr的分组结合any()函数就能实现需求:

library(dplyr)

df2 <- df %>%
  group_by(name) %>%
  filter(any(year == 2021)) %>%
  ungroup()

代码逻辑说明

  • group_by(name):按name字段分组,把数据拆成A、B、C、D四个子数据集
  • filter(any(year == 2021)):对每个分组检查是否存在year为2021的行,只要有一行满足,就保留整个分组的所有行
  • ungroup():取消分组标记,让结果回到常规数据框格式

输出结果

运行后df2的内容与期望一致:

> df2
# A tibble: 7 × 3
  name   year   col
  <chr> <dbl> <dbl>
1 C      2019     5
2 C      2020     7
3 C      2021     3
4 D      2018     7
5 D      2019     9
6 D      2020     1
7 D      2021     4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:25:14