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

如何高效获取各航空乘客满意度维度的最高均值舱位?

高效实现航空乘客满意度维度均值对比

问题分析

你需要对比不同舱位(重点是商务舱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

输出示例(基于你的样本数据)

运行代码后会得到如下格式的结果:

CategoryClassMean score
CleanlinessBusiness4.0
Gate LocationBusiness4.0
Check-in ServiceBusiness3.5
Online BoardingBusiness3.5

关键说明

  • na.rm = TRUE:避免缺失值导致均值计算出错,可根据数据集实际情况调整。
  • 若需包含所有舱位(如Economy Plus),删除代码中的filter(Class %in% ...)语句即可。
  • dplyr的across()替代了过时的summarise_at,符合最新语法规范。

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:01:02