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

求助:如何用dplyr计算4星及以上评分占比的Top5电影

嘿,刚接触编程和这个网站完全不用慌,咱们用dplyr绝对能搞定你要的需求,而且完全契合你现有的统计评分次数的逻辑~

首先明确核心思路:咱们需要先按电影分组,统计每部电影的总评分次数和4星及以上的评分次数,然后用后者除以前者就能得到占比。这里summarize和mutate都能派上用场,具体看你想要保留什么样的结果。

情况1:直接从原始评分数据出发

假设你的原始数据是类似movie_ratings这样的格式(包含电影名和对应评分),可以这么写:

library(dplyr)

# 模拟示例数据,你可以替换成自己的数据集
movie_ratings <- tibble(
  movie_title = rep(c("星际穿越", "肖申克的救赎", "霸王别姬", "盗梦空间", "泰坦尼克号", "流浪地球"), each = 20),
  rating = sample(1:5, 120, replace = TRUE)
)

# 核心代码:分组→计算指标→排序取Top5
top5_movies <- movie_ratings %>%
  # 按电影名称分组
  group_by(movie_title) %>%
  # 汇总每部电影的关键指标
  summarize(
    total_rating_count = n(),  # 总评分次数
    four_star_plus_count = sum(rating >= 4),  # 4星及以上的次数
    four_star_ratio = four_star_plus_count / total_rating_count  # 计算占比
  ) %>%
  # 按4星占比从高到低排序
  arrange(desc(four_star_ratio)) %>%
  # 取前5名
  slice_head(n = 5)

情况2:基于你已有的评分次数统计结果(契合现有代码逻辑)

如果你已经用count统计了各评分的出现次数,比如现有代码是这样的:

# 你现有的统计评分次数的代码
rating_detail_counts <- movie_ratings %>%
  count(movie_title, rating)

那可以直接基于这个结果继续计算占比,完全衔接你的现有逻辑:

top5_movies <- rating_detail_counts %>%
  group_by(movie_title) %>%
  summarize(
    total_rating_count = sum(n),  # 每部电影的总评分次数
    four_star_plus_count = sum(n[rating >= 4]),  # 筛选4星及以上的评分,求和次数
    four_star_ratio = four_star_plus_count / total_rating_count
  ) %>%
  arrange(desc(four_star_ratio)) %>%
  slice_head(n = 5)

关于mutate的补充说明

如果你不想汇总成每部电影一行的结果,而是想在原始的每条评分记录里都显示该电影的4星占比,那mutate就派上用场了:

ratings_with_ratio <- movie_ratings %>%
  group_by(movie_title) %>%
  mutate(
    total_rating_count = n(),
    four_star_plus_count = sum(rating >= 4),
    four_star_ratio = four_star_plus_count / total_rating_count
  ) %>%
  ungroup()

这样每条记录都会带上对应电影的占比数据,方便你后续其他操作。

如果你的数据有特殊格式或者现有代码有具体问题,可以把代码片段贴出来,咱们再调整~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:35:48