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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:17:11