求助:如何用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
相关产品推荐
相关产品推荐

