在R中的sjPlot下使用plot_liker命令对likert图进行分组时出错

问题描述 投票:0回答:1

我正在尝试使用 R 中 sjPlot 下的plot_liker 命令创建分组李克特图。尝试执行以下命令:


library(sjPlot)
library(ggplot2)
library(readxl)


mydf1<- read_excel("C:\\Users\\HP\\Desktop\\aa\\source_teacher.xlsx")
mydf1<- data.frame(mydf1)

mydf1$Domain <- factor(mydf1$Domain)

legend_labels <- c("1 Never", "2 Sometime", "3 Often", "4 Very Often") # Plotting with custom legend


p <- plot_likert(mydf1[1:4], groups = mydf1$Domain,
                 catcount = 4,
                 legend.labels = legend_labels)

p + theme(
  axis.text.y = element_text(color = "black", size = 14),
  legend.position = "bottom"
) 

它给出了一个错误:

Error: Length of groups has to equal the number of items: ncol(items) != length(groups).

数据集是

在线期刊 在线数据库 电子书 其他 域名
4 2 1 4 老师
3 3 4 2 老师
2 1 4 3 学生
1 3 2 4 学生

需要通过对“教师”和“学生”进行分组来形成分组李克特图。

r plot sjplot likert
1个回答
0
投票

根据我对文档的理解,这是不可能的

sjPlot::plot_likert
,例如
groups=
参数用于对项目或问题进行分组。这就是为什么它应该是一个等于项目数的向量(对于提供的示例数据,其中行数等于项目列数,即 4,您的代码实际上可以工作)。

但是为每个

Domain
类别获取李克特图的一种选择是切换到
ggstats::gglikert
:

library(tidyverse)
library(ggstats)

data <- tibble(
  `Online Journals` = c(4, 3, 2, 1),
  `Online Databases` = c(2, 3, 1, 3),
  `E-books` = c(1, 4, 4, 2),
  `Others` = c(4, 2, 3, 4),
  Domain = c("Teacher", "Teacher", "Student", "Student")
)

legend_labels <- c("1 Never", "2 Sometime", "3 Often", "4 Very Often")

data |>
  mutate(across(-Domain, ~ factor(.x, levels = 1:4, labels = legend_labels))) |>
  gglikert(
    -Domain,
    facet_rows = vars(Domain),
    variable_labels = legend_labels,
    labels_size = 3
  )

© www.soinside.com 2019 - 2024. All rights reserved.