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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.15 16:16:01