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

如何基于组内恒定变量的最大值筛选指定数量分组的数据集?

解决分组数据集筛选Top N用户的问题

你遇到的问题在于用group_by(id)后调用top_n,这是在每个用户组内部筛选行,但每个用户的n_visits都是恒定的,所以每个组里的所有行都被保留了,自然得到全部数据。我们需要的是先筛选出n_visits最高的前2个用户,再保留这些用户的所有数据,具体方案如下:

方法一:分步筛选(清晰直观)

先提取每个用户的唯一id和对应的n_visits(因为每个用户的n_visits不变,去重即可),然后选出前2个用户的id:

# 提取Top 2用户的id
top_users <- da %>%
  distinct(id, n_visits) %>%  # 获取每个用户的唯一访问次数记录
  top_n(2, n_visits) %>%      # 选出访问次数最高的2个用户
  pull(id)                    # 提取id向量

# 筛选原数据中这些用户的所有行
da %>% filter(id %in% top_users)

方法二:合并为一步(更简洁)

可以把两步合并成一个链式操作,避免中间变量:

da %>%
  filter(
    id %in% (
      da %>%
        distinct(id, n_visits) %>%
        top_n(2, n_visits) %>%
        pull(id)
    )
  )

方法三:使用slice_max(dplyr新版本推荐)

如果你的dplyr版本较新,推荐用slice_max替代top_n(top_n已被标记为软弃用),逻辑完全一致:

da %>%
  filter(
    id %in% (
      da %>%
        distinct(id, n_visits) %>%
        slice_max(n_visits, n = 2) %>%
        pull(id)
    )
  )

最终输出结果

不管用哪种方法,都会得到你期望的结果:

id n_visits
1  1        3
2  1        3
3  1        3
4  2        2
5  2        2
6  2        2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:29:07