我在 R 中有一个名为 df 的数据框:
df
Item Strongly Disagree Disagree So So Agree Strongly Agree
1 BRAZIL 13.33333 25.83333 15.83333 15.83333 29.16667
2 GERMANY 20.00000 20.00000 20.00000 10.00000 30.00000
3 ITALY 40.00000 0.00000 60.00000 0.00000 0.00000
4 USA 0.00000 16.25000 22.50000 28.75000 32.50000
我想使用 ggstats 中的 ggplot2 或 gglikert 创建一个 Likert 标度图。具体来说,我希望在 y 轴上有国家,在 x 轴上有李克特水平。但我想根据最左边的比例(两个较低水平的组合(总和))按降序排序。 (即,最右边的百分比在两个较高类别的总和中分别按升序排列)。
如何使用 gglikert 在 R 中执行此操作?
数据:
dput(DF)
structure(list(Item = c("BRAZIL", "GERMANY", "ITALY", "USA"),
`Strongly Disagree` = c(15, 20, 40, 13.3333333333333), Disagree = c(15,
40, 40, 20), `So So` = c(20, 10, 20, 13.3333333333333), Agree = c(15,
20, 0, 40), `Strongly Agree` = c(35, 10, 0, 13.3333333333333
)), row.names = c(NA, -4L), class = "data.frame")
你可以试试
library(tidyverse)
library(ggstat)
df %>%
pivot_longer(-c(Item)) %>%
mutate(value = ifelse(Item == "USA" & name == "Strongly Agree", 14, value)) %>%
split(.$Item) %>%
map2_dfc(., names(.), ~tibble(rep(.x$name,times = round(.x$value))) %>% set_names(.y)) %>%
mutate(across(everything(), ~ factor(.x, levels = likert_levels))) %>%
gglikert(sort = "descending")