我正在尝试使用 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 | 学生 |
需要通过对“教师”和“学生”进行分组来形成分组李克特图。
根据我对文档的理解,这是不可能的
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
)