R语言如何计算各分组内每个类别的平均评分
问题描述
现有存储游戏评分的R数据框,包含游戏所属类别、游玩模式(单人/双人)、评分三个字段,数据构造代码如下:
category <- c("Party","Adventure","Puzzle","Party","Adventure","Puzzle","Party","Adventure","Puzzle","Party","Adventure","Puzzle","Party","Adventure","Puzzle","Party","Adventure","Puzzle") solo <- c("solo","solo","solo","double","double","double","solo","solo","solo","double","double","double","solo","solo","solo","double","double","double") rating <- c(8,7,6,5,3,3,2,1,10,3,4,5,6,3,2,1,3,1) df <- as.data.frame(rating) df$solo <- solo df$category <- category
需要按「游玩模式+游戏类别」的交叉维度分组,计算每个分组的平均评分,例如单人模式Party类、双人模式Party类需要分别输出独立的平均评分结果。
可行实现方案
以下三种方案都可以直接得到结果,根据自己平时用的工具链选择即可:
1. 基础R实现(无需安装第三方包)
直接用基础包自带的aggregate分组计算函数,不需要额外安装任何包,复制就能运行:
# 按solo、category两个维度分组计算rating均值 result <- aggregate(rating ~ solo + category, data = df, FUN = mean)
返回结果包含三列:solo(游玩模式)、category(游戏类别)、rating(对应分组的平均评分)。
2. dplyr实现(tidyverse生态常用写法)
如果日常数据处理习惯用dplyr,分组汇总的写法可读性更强:
library(dplyr) result <- df %>% group_by(solo, category) %>% summarise(avg_rating = mean(rating), .groups = "drop")
参数.groups = "drop"的作用是计算完成后自动取消数据的分组属性,避免后续对数据做其他操作时受残留分组影响。
3. data.table实现(大数据量场景首选)
如果数据量级很大,data.table的分组计算速度远高于前两种方案:
library(data.table) # 把数据框转成data.table格式 setDT(df) result <- df[, .(avg_rating = mean(rating)), by = .(solo, category)]
内容的提问来源于stack exchange,提问作者chriswang123456
相关产品推荐
相关产品推荐

