我从 ggsstats 库这里获得了 R 中的 ggplikert() 函数。他们使用采样数据并创建一个名为 df 的数据框。我使用的与链接中给出的相同。(df而不是df_dk)。好的,如果我在 R 中运行以下代码:
p = ggstats::gglikert(df, sort = "descending",
sort_method = c("prop"))
p
我收到一个情节:
按升序排序,“prop”按照比例排序 答案高于中心水平。我希望根据最左边的比例对图进行排序,该比例是两个较低级别的组合(总和)。 (即分别是最右边的两个较低类别之和的百分比。)
我怎样才能在 R 中实现这一目标?
这是一种可能的选项,它使用
reorder
和 ifelse
使用 y
和 sum
答案的计数(又名 Strictly disagree
)对映射到 disagree
的变量重新排序。在底层 ggstats::gglikert
将数据重塑为 long,其中问题 id 存储在名为 .question
的列中,答案存储在名为 .answer
的列中:
library(ggplot2)
library(ggstats)
ggstats::gglikert(df) +
aes(y = reorder(.question,
ifelse(
.answer %in% c("Strongly disagree", "Disagree"),
1, 0
),
FUN = sum
))
数据
likert_levels <- c(
"Strongly disagree",
"Disagree",
"Neither agree nor disagree",
"Agree",
"Strongly agree"
)
set.seed(42)
library(dplyr, warn = FALSE)
df <-
tibble(
q1 = sample(likert_levels, 150, replace = TRUE),
q2 = sample(likert_levels, 150, replace = TRUE, prob = 5:1),
q3 = sample(likert_levels, 150, replace = TRUE, prob = 1:5),
q4 = sample(likert_levels, 150, replace = TRUE, prob = 1:5),
q5 = sample(c(likert_levels, NA), 150, replace = TRUE),
q6 = sample(likert_levels, 150, replace = TRUE, prob = c(1, 0, 1, 1, 0))
) %>%
mutate(across(everything(), ~ factor(.x, levels = likert_levels)))