如何按Competent占比升降序排列likert分组图内的组别
解决Likert包分组图表按指定选项占比排序的问题
核心思路
要实现每个问题区块内按Competent选项的占比对组别排序,需先从likert对象中提取每个问题-组别对应的Competent占比数据,据此重新调整每个问题下的组别顺序,最后重构likert对象完成绘图。
具体代码实现
先加载所需依赖包:
library(likert) library(dplyr) library(tidyr)
步骤1:提取并整理占比数据
假设你的likert对象名为likert_obj,先将其转换为数据框,筛选出每个问题、组别对应的Competent占比:
# 提取likert结果数据,按问题分组后按Competent占比升序排序 likert_df <- likert_obj$results %>% select(Item, Group, Competent) %>% group_by(Item) %>% arrange(Competent, .by_group = TRUE) %>% ungroup()
若需要降序排列,将arrange(Competent, .by_group = TRUE)改为arrange(desc(Competent), .by_group = TRUE)即可。
步骤2:调整原始数据的组别顺序
假设你的原始响应数据框为response_data,包含Group(组别)、Item(问题)及对应选项列:
# 生成每个问题对应的组别排序规则 group_order_list <- likert_df %>% group_by(Item) %>% summarise(group_order = list(Group)) %>% deframe() # 按规则重新排序原始数据 sorted_data <- response_data %>% group_by(Item) %>% arrange(factor(Group, levels = group_order_list[[cur_group()$Item]]), .by_group = TRUE) %>% ungroup()
步骤3:重构likert对象并绘图
# 基于排序后的数据创建新的likert对象 sorted_likert <- likert(sorted_data, grouping = "Group") # 生成排序后的分组likert图 plot(sorted_likert)
关键说明
- 确保原始数据结构符合likert包要求:宽格式下每个问题对应一列;长格式需包含
Item(问题)、Response(选项)和Group(分组)列。 - 若你的原始数据是宽格式,可先用
likert::likert_to_long()转换为长格式后再执行上述排序步骤。
内容的提问来源于stack exchange,提问作者James_greyyy
相关产品推荐
相关产品推荐

