R 中带百分比的 gglikert 图

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

我在 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")
r ggplot2 likert
1个回答
0
投票

你可以试试

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")

enter image description here

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