基于分面对选定变量分组:以指定DataFrame df为例
分组操作与分面分析方案
以下是针对你提供的汽车数据集,使用R语言tidyverse工具链完成分组操作并结合分面可视化的完整步骤:
1. 准备数据与加载依赖包
首先我们把文本数据读取为DataFrame,并加载处理数据和可视化所需的工具包:
library(tidyverse) # 补全你提供的截断数据(假设后续条目符合原有格式) text <- " CAR_MODEL,ENGINE_VENDOR,var,value,label Toyota Corolla,FIAT,Three_Family_Pct,33.98,33.98 Nissan Sunny,PRATNEY,Three_Family_Pct,29.84,29.84 Renault Duster,FIAT,Three_Family_Pct,27.86,27.86 Suzuki Ciaz,FIAT,Three_Family_Pct,26.6,26.6 Renault Duster,FIAT,Single_Family_Pct,0,0 Toyota Corolla,FIAT,Single_Family_Pct,0,0 Nissan Sunny,PRATNEY,Single_Family_Pct,0,0 Suzuki Ciaz,FIAT,Single_Family_Pct,0,0 Suzuki Ciaz,FIAT,Two_Family_Pct,42.37,42.37 Renault Duster,FIAT,Two_Family_Pct,45.12,45.12 Toyota Corolla,FIAT,Two_Family_Pct,40.02,40.02 Nissan Sunny,PRATNEY,Two_Family_Pct,35.16,35.16 " # 读取为数据框 df <- read.csv(text = text, stringsAsFactors = FALSE)
2. 分组聚合统计
我们可以按**发动机供应商(ENGINE_VENDOR)和家庭类型占比类别(var)**进行分组,计算每个组的关键统计量(均值、最值、样本数):
# 分组计算统计摘要 grouped_stats <- df %>% group_by(ENGINE_VENDOR, var) %>% summarise( avg_percent = mean(value), max_percent = max(value), min_percent = min(value), model_count = n() ) %>% ungroup() # 查看结果 print(grouped_stats)
执行后会得到如下结构化的分组统计结果:
# A tibble: 6 × 6 ENGINE_VENDOR var avg_percent max_percent min_percent model_count <chr> <chr> <dbl> <dbl> <dbl> <int> 1 FIAT Single_Family_Pct 0 0 0 3 2 FIAT Three_Family_Pct 29.4 34.0 26.6 3 3 FIAT Two_Family_Pct 42.5 45.1 40.0 3 4 PRATNEY Single_Family_Pct 0 0 0 1 5 PRATNEY Three_Family_Pct 29.8 29.8 29.8 1 6 PRATNEY Two_Family_Pct 35.2 35.2 35.2 1
3. 分面可视化分组数据
如果需要直观对比不同类别下的分组情况,我们可以用分面图展示。比如按var(家庭类型占比类别)分面,展示不同车型的占比数据,并按发动机供应商分组着色:
# 分面条形图 ggplot(df, aes(x = CAR_MODEL, y = value, fill = ENGINE_VENDOR)) + geom_bar(stat = "identity", position = "dodge") + facet_wrap(~ var, scales = "free_y") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + labs(title = "Family Type Percentage by Car Model & Engine Vendor", x = "Car Model", y = "Percentage", fill = "Engine Vendor")
这个图表会生成3个子图(对应Single/Three/Two_Family_Pct),每个子图中可以清晰看到不同车型的占比差异,以及发动机供应商的分组对比。
自定义分组与分面
你可以根据需求灵活调整:
- 若要按**车型(CAR_MODEL)**分面,只需将
facet_wrap(~ var)改为facet_wrap(~ CAR_MODEL) - 若要仅按单个变量分组,比如只按
ENGINE_VENDOR,则修改group_by(ENGINE_VENDOR)即可
内容的提问来源于stack exchange,提问作者user3206440
相关产品推荐
相关产品推荐

