如何高效获取各航空乘客满意度维度的最高均值舱位?
高效实现航空乘客满意度维度均值对比
问题分析
你需要对比不同舱位(重点是商务舱vs经济舱)在各满意度维度的均值,找出每个维度均值最高的舱位及对应分值,替代逐个维度计算的低效方法。
先解决你的data.table报错问题
你报错的核心原因是把字符串列名直接传给了mean(),data.table会将"Cleanliness"当成字符向量计算均值,自然触发类型错误。正确写法应该直接使用列名(不带引号),如果是动态调用列名则用get():
library(data.table) setDT(final_dataset) # 单维度正确计算示例 final_dataset[, .(mean_score = mean(Cleanliness)), by = Class][which.max(mean_score)]
高效批量处理方法
不管用dplyr还是data.table,都可以批量处理所有满意度维度,无需逐个编写代码。以下是两种实用实现:
方法1:dplyr(易读性强,适合新手)
用across()批量处理评分列,转长格式后分组筛选每个维度的最高均值记录:
library(dplyr) library(tidyr) # 1. 定义所有满意度评分列(根据你的实际数据集调整) score_cols <- c("Check-in Service", "Online Boarding", "Gate Location", "Cleanliness") # 2. 计算均值→转长格式→筛选最高均值记录 result_dplyr <- final_dataset %>% # 可选:仅保留商务舱和经济舱,若需包含所有舱位则删除该行 filter(Class %in% c("Business", "Economy")) %>% group_by(Class) %>% summarise(across(all_of(score_cols), ~mean(.x, na.rm = TRUE)), .groups = "drop") %>% pivot_longer(cols = all_of(score_cols), names_to = "Category", values_to = "Mean score") %>% group_by(Category) %>% filter(`Mean score` == max(`Mean score`)) %>% arrange(Category) # 输出表格格式 knitr::kable(result_dplyr)
方法2:data.table(性能更优,适合大数据集)
用melt()转长格式,分组计算均值后筛选每个维度的最大值:
library(data.table) setDT(final_dataset) score_cols <- c("Check-in Service", "Online Boarding", "Gate Location", "Cleanliness") # 1. 转长格式并计算各舱位均值 dt_melted <- melt(final_dataset, id.vars = "Class", measure.vars = score_cols, variable.name = "Category", value.name = "Score") # 2. 分组筛选每个维度的最高均值记录 result_dt <- dt_melted[Class %in% c("Business", "Economy"), .(Mean score = mean(Score, na.rm = TRUE)), by = .(Category, Class)][, .SD[which.max(`Mean score`)], by = Category] # 查看结果 result_dt
输出示例(基于你的样本数据)
运行代码后会得到如下格式的结果:
| Category | Class | Mean score |
|---|---|---|
| Cleanliness | Business | 4.0 |
| Gate Location | Business | 4.0 |
| Check-in Service | Business | 3.5 |
| Online Boarding | Business | 3.5 |
关键说明
na.rm = TRUE:避免缺失值导致均值计算出错,可根据数据集实际情况调整。- 若需包含所有舱位(如Economy Plus),删除代码中的
filter(Class %in% ...)语句即可。 - dplyr的
across()替代了过时的summarise_at,符合最新语法规范。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

