基于最差李克特等级排序gglikert图表并展示分组变量前n个类别的技术实现问询
基于最差李克特等级排序gglikert图表并展示分组变量前n个类别的技术实现问询
嘿,我来帮你搞定这个需求!我们要实现两个核心目标:一是只展示分组变量里出现频次最高的前n个类别,二是把三个李克特问题按照Strongly disagree(最差等级)的占比从高到低排序,最后用gglikert画出分面图。下面是一步步的实现过程:
第一步:准备数据并筛选分组前n个类别
首先完善你提供的数据生成代码,再筛选出分组变量var中出现次数最多的前n个类别(这里我设n=5,你可以按需调整):
# Load necessary libraries library(tibble) library(tidyverse) library(ggplot2) library(ggpubr) library(ggstats) # Define categories and Likert levels var_levels <- c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q") likert_levels <- c( "Strongly disagree", "Disagree", "Neither agree nor disagree", "Agree", "Strongly agree" ) # Set seed for reproducibility set.seed(42) # Create the dataframe with three Likert response columns df <- tibble( var = sample(var_levels, 50, replace = TRUE), # Random values from A to Q val1 = sample(likert_levels, 50, replace = TRUE), val2 = sample(likert_levels, 50, replace = TRUE), val3 = sample(likert_levels, 50, replace = TRUE) ) # 筛选分组变量var的前5个高频类别(n=5可调整) top_n_groups <- df %>% count(var, sort = TRUE) %>% slice_head(n = 5) %>% pull(var) df_filtered <- df %>% filter(var %in% top_n_groups)
第二步:整理数据并按最差等级排序问题
把数据转换成gglikert需要的长格式,再计算每个问题的Strongly disagree占比,以此为依据给问题排序:
# 转换为长格式,并指定李克特等级的顺序(保证图表顺序正确) df_long <- df_filtered %>% pivot_longer(cols = starts_with("val"), names_to = "question", values_to = "response") %>% mutate(response = factor(response, levels = likert_levels)) # 计算每个问题的Strongly disagree占比,用于排序 question_order <- df_long %>% count(question, response) %>% group_by(question) %>% mutate(prop = n / sum(n)) %>% filter(response == "Strongly disagree") %>% arrange(desc(prop)) %>% pull(question) # 把question列转换成按占比排序的因子 df_long <- df_long %>% mutate(question = factor(question, levels = question_order))
第三步:绘制分面的gglikert图表
用gglikert函数绘制图表,同时按分组变量var分面展示:
# 绘制分面gglikert图 gglikert(df_long, x = question, y = response, facet = var) + labs(title = "Likert Responses by Group (Top 5 Categories)", x = "Questions", y = "Response") + theme_bw() + theme(axis.text.x = element_text(angle = 45, hjust = 1))
最终生成的图表会完全符合你的需求:
- 只展示分组变量中出现频次最高的前5个类别
- 三个问题按照Strongly disagree的占比从高到低排列
- 每个分组类别作为独立分面展示
如果要调整展示的分组数量,只需要修改slice_head(n = 5)里的数字即可!
备注:内容来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

