如何按Item ID对多维度数据分组求均值?(R语言)
按Item ID分组计算多维度数据均值的简洁方法
你需要对带有Item ID的多维度数据按ID分组,分别计算各维度的均值,以下是两种实用的R实现方法:
输入数据示例
| Item ID | Taste | Colour |
|---|---|---|
| ID1 | 4 | 3 |
| ID1 | 4 | 3 |
| ID1 | 2 | 2 |
| ID1 | 4 | 3 |
| ID2 | 3 | 2 |
| ID2 | 3 | 4 |
| ID2 | 2 | 3 |
| ID3 | 4 | 2 |
| ID3 | 3 | 2 |
| ID3 | 4 | 3 |
| ID3 | 3 | 4 |
期望输出
| Item ID | Taste | Colour |
|---|---|---|
| ID1 | 3.5 | 2.75 |
| ID2 | 2.67 | 3 |
| ID3 | 3.5 | 2.75 |
方法1:使用dplyr包(简洁直观,适合tidyverse工作流)
先构造示例数据框(实际使用时替换为你的数据):
df <- data.frame( Item_ID = c("ID1", "ID1", "ID1", "ID1", "ID2", "ID2", "ID2", "ID3", "ID3", "ID3", "ID3"), Taste = c(4,4,2,4,3,3,2,4,3,4,3), Colour = c(3,3,2,3,2,4,3,2,2,3,4) )
加载dplyr并计算分组均值:
library(dplyr) # 按Item_ID分组,对指定维度列计算均值并保留2位小数 result <- df %>% group_by(Item_ID) %>% summarise( across(c(Taste, Colour), ~round(mean(.), 2)) ) print(result)
如果有6个维度,只需将c(Taste, Colour)替换为所有目标列名,比如c(Taste, Colour, Dim3, Dim4, Dim5, Dim6)。
方法2:使用基础R的aggregate函数(无需额外安装包)
直接用基础R函数实现,适合不想加载第三方包的场景:
# 构造数据框(同上) df <- data.frame( Item_ID = c("ID1", "ID1", "ID1", "ID1", "ID2", "ID2", "ID2", "ID3", "ID3", "ID3", "ID3"), Taste = c(4,4,2,4,3,3,2,4,3,4,3), Colour = c(3,3,2,3,2,4,3,2,2,3,4) ) # 按Item_ID分组计算均值,保留2位小数 result_base <- aggregate(. ~ Item_ID, data = df, FUN = function(x) round(mean(x), 2)) print(result_base)
内容的提问来源于stack exchange,提问作者Bommby
相关产品推荐
相关产品推荐

