R语言多变量水平条形图绘制:likert包报错求助
解决likert包因子水平不一致问题并绘制水平条形图
问题根源
报错All items (columns) must have the same number of levels是因为你的flying65里部分变量的因子水平不全——比如有的问题没收到某类回答(比如没人选"No, not at all rude"),R会自动把该变量的因子水平缩减为实际存在的选项,导致列与列之间水平数不匹配,而likert()要求所有输入变量必须共享完全相同的因子水平集合。
解决步骤
1. 统一所有变量的因子水平
先明确所有可能的选项并固定顺序(保证绘图时选项排列一致),再批量把所有列转换成带固定水平的有序因子:
# 定义所有粗鲁程度选项的固定顺序 rude_levels <- c("No, not at all rude", "Yes, somewhat rude", "Yes, very rude") # 批量转换所有列为指定水平的有序因子 library(dplyr) flying65 <- flying65 %>% mutate(across(everything(), ~ factor(., levels = rude_levels, ordered = TRUE)))
across(everything()):一次性处理数据框里的所有列ordered = TRUE:标记为有序因子,符合粗鲁程度的递进逻辑,也能让likert图的选项顺序正确
2. 验证因子水平一致性(可选但推荐)
运行下面的代码检查每列的因子水平,确保所有列都包含三个指定选项:
lapply(flying65, levels)
3. 生成likert对象并绘制水平条形图
现在可以正常调用likert()并绘图了:
library(likert) # 创建likert对象 likert_male <- likert(flying65) # 绘制水平条形图 plot(likert_male, type = "bar", horizontal = TRUE)
如果需要自定义图表样式,比如标题、颜色:
plot(likert_male, type = "bar", horizontal = TRUE, main = "男性群体对乘机行为粗鲁程度的态度分布", col = c("#4CAF50", "#FFC107", "#F44336")) # 对应三个选项的颜色
额外提示
如果数据里存在缺失值(NA),likert()会自动将其排除在占比计算外;如果需要把NA作为一个单独的类别展示,可以在转换因子时用forcats::fct_explicit_na()把NA转为明确的水平。
内容的提问来源于stack exchange,提问作者Ilse H
相关产品推荐
相关产品推荐

