如何从ggplot2中的1-4比例数据制作堆叠百分比列

时间:2019-04-30 05:52:22

标签: r ggplot2

我有大量的序数比例数据,我想将它们可视化为堆积百分比柱状图。我可以在excel中进行所需的操作,但希望将流程移至R中以实现更高效的工作流程。数据来自观察行为,并对1-4个17个不同项目的每个观察结果进行评级。我需要在堆积的栏中显示每个项目的每个评分的百分比。

我的第一个问题是将我拥有的数据转换成所需的百分比。第二个问题是将其转换为ggplot可视化。尽管我很确定这一切都可以用几行代码完成,但是我不确定如何做到。当我在excel中制作这些图表时,我必须沿着= COUNTIF(V2:V295,1)/ COUNTA(V2:V295)的界线使用一个公式,但是要针对每个比例级别和每个指标。然后,我将其变成堆积的百分比柱状图,只需单击鼠标即可。

# A tibble: 6 x 17
     S1    S2    S3 Skills    T4    T5    T6 Thinking    A7    A8    A9 Application   R10   R11   R12
  <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl>    <dbl> <dbl> <dbl> <dbl>       <dbl> <dbl> <dbl> <dbl>
1     4     4     4      4     3     3     3        3     4     4     2           4     4     4     3
2     3     4     3      3     3     3     2        3     3     3     1           3     3     3     2
3     3     3     3      3     2     2     1        2     3     2     1           2     3     1     3
4     4     3     3      3     3     3     3        3     2     2     1           2     3     2     3
5     4     3     3      3     3     3     2        3     2     3     3           3     4     2     3
6     4     4     3      4     3     3     3        3     2     3     2           3     4     3     4
# ... with 2 more variables: Relationships <dbl>, Overall <dbl>

由此,我想要一个堆叠的柱状图,该柱状图按列(S1,S2,S3等)显示每个比例值(1-4)的百分比。任何指导将不胜感激!

哦,是的,我希望尽可能多地停留在dydyverse中,以完成此操作,尽管如果我需要另一个软件包来处理这种类型的数据,我会自己玩。

1 个答案:

答案 0 :(得分:0)

很难知道您到底在寻找什么。但是,这是一个好主意,也许您可​​以提出一些意见,以使我们对此表示关注。但是从我收集的数据来看,您需要将数据收集为长格式,然后进行分组和汇总,以获取取决于项目的标度值计数。然后,您可以通过对列进行分组并使用prop.table来获得比例。

melt正在将数据从宽格式转换为长格式,以便可以进行分组。它还允许ggplot很好地绘制和分组数据!

df <- tibble::tribble(  
~S1,  ~S2,  ~S3,  ~Skills,  ~T4,  ~T5,  ~T6,  ~Thinking,  ~A7,  ~A8,  ~A9,  ~Application,  ~R10,  ~R11,  ~R12,
4,  4,  4,  4,  3,  3,  3,  3,  4,  4,  2,  4,  4,  4,  3,
3,  4,  3,  3,  3,  3,  2,  3,  3,  3,  1,  3,  3,  3,  2,
3,  3,  3,  3,  2,  2,  1,  2,  3,  2,  1,  2,  3,  1,  3,
4,  3,  3,  3,  3,  3,  3,  3,  2,  2,  1,  2,  3,  2,  3,
4,  3,  3,  3,  3,  3,  2,  3,  2,  3,  3,  3,  4,  2,  3,
4,  4,  3,  4,  3,  3,  3,  3,  2,  3,  2,  3,  4,  3,  4)

prop_table  <- df %>% 
  reshape2::melt() %>% 
  group_by(value, variable) %>% 
  summarise(n = n()) %>% 
  group_by(variable) %>% 
  mutate(prop = prop.table(n))

prop_table %>% 
  ggplot(aes(x = variable, y = prop, fill = as.factor(value))) + 
  geom_bar(stat = "identity",
           position = "stack")