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

如何用R语言dplyr将聚合的min/max替换为对应电影名称?

问题描述

需按ID分组,生成展示每组最冷门与最热门电影名称的表格,期望样式如下:

ID最冷门电影最热门电影
1xyzrty
2zxcqwz

目前使用R语言dplyr包的group_by与summarise函数仅能获取popularity的最小、最大值,无法得到对应电影名称,尝试的代码如下:

movies%>%
    group_by(ID) %>%
    summarise(
      Least = min(popularity),
      Most= max(popularity))
解决方案

方法1:用slice_min/slice_max筛选后整理宽表

先分别提取每组中流行度最低、最高的电影记录,再合并为目标格式:

library(dplyr)
library(tidyr)

# 提取最冷门电影数据
least_popular <- movies %>%
  group_by(ID) %>%
  slice_min(popularity, n = 1, with_ties = FALSE) %>%
  select(ID, movie_name) %>%
  rename(最冷门电影 = movie_name)

# 提取最热门电影数据
most_popular <- movies %>%
  group_by(ID) %>%
  slice_max(popularity, n = 1, with_ties = FALSE) %>%
  select(ID, movie_name) %>%
  rename(最热门电影 = movie_name)

# 合并成目标表格
result <- least_popular %>%
  left_join(most_popular, by = "ID")
  • with_ties = FALSE表示当有多个电影流行度相同时,仅保留第一条;若需保留所有同流行度电影,改为TRUE即可。

方法2:在summarise中直接匹配电影名称

通过which.min/which.max定位流行度极值的索引,直接提取对应电影名:

library(dplyr)

result <- movies %>%
  group_by(ID) %>%
  summarise(
    最冷门电影 = movie_name[which.min(popularity)],
    最热门电影 = movie_name[which.max(popularity)]
  )

注意:若同一ID下存在多个流行度相同的极值电影,此方法仅返回第一个匹配项;如需保留全部,建议使用方法1并调整with_ties参数。

内容的提问来源于stack exchange,提问作者Misieeek Inv.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:16:06