根据 R 中的组合百分比对 gglikert 图表进行排序

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

我从 ggsstats 库这里获得了 R 中的 ggplikert() 函数。他们使用采样数据并创建一个名为 df 的数据框。我使用的与链接中给出的相同。(df而不是df_dk)。好的,如果我在 R 中运行以下代码:

p = ggstats::gglikert(df, sort = "descending",
                  sort_method = c("prop"))
p

我收到一个情节:

按升序排序,“prop”按照比例排序 答案高于中心水平。我希望根据最左边的比例对图进行排序,该比例是两个较低级别的组合(总和)。 (即分别是最右边的两个较低类别之和的百分比。)

我怎样才能在 R 中实现这一目标?

r ggplot2 likert
1个回答
0
投票

这是一种可能的选项,它使用

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)))
© www.soinside.com 2019 - 2024. All rights reserved.