如何使用 ggplot2 在 R 中绘制多响应调查项?

How to plot multiple response survey items in R using ggplot2?

我将调查数据结构化为几个项目变量,这些变量表示调查受访者是否提及 (1) 或未提及 (2)。所以简而言之,每一行都针对不同的调查受访者,他们可以选择所有选项 a 到 c(如下面数据中第三个受访者的情况),或者 none 或只是一些。

假设这是数据集:

testdat<-data.frame(option_a=c(1,2,2,1,2),
                    option_b=c(1,1,2,1,2),
                    option_c=c(1,1,2,1,1))

绘制任何选项被选择频率的相对频率的最简单和最快的方法是什么?结果应该是一个 geom_bar 图,其中三个条代表不同的选项(a:40%,b:60%,c:20%)。换句话说,我想有一个情节,据此我可以说,受访者在 x% 的情况下选择了给定的选项。

有没有一种方法可以直接在 ggplot 中执行此操作,而无需重组数据集或将 2s 替换为 0s 等?我想这应该很容易,但我现在看不到它。

对于条形图,您需要将数据制成长格式。您不能在 ggplot 函数本身内执行此操作。您可以更改 ggplot 内值的级别,但您还需要重命名 fill 图例。

testdat<-data.frame(option_a=c(1,2,2,1,2),
                    option_b=c(1,1,2,1,2),
                    option_c=c(1,1,2,1,1))

require(ggplot2)
require(tidyverse)

testdat %>%
  gather(option,value) %>%
  ggplot(aes(x = factor(option), fill = factor((value-2)*-1))) +
  geom_bar()

要获得 percentages/proportions 而不是 n,您可以在绘制数据之前总结数据,如下所示:

testdat %>%
  gather(option, value) %>%
  group_by(option,value) %>%
  summarise(n = n()) %>%
  group_by(option) %>%
  mutate(percentage = n/sum(n)*100) %>%
  ggplot(aes(x = factor(option), y = percentage, fill = factor((value-2)*-1))) +
  geom_bar(stat = "identity")

编辑:

只显示其中一个选项的相对频率:

testdat %>%
  gather(option, value) %>%
  group_by(option,value) %>%
  summarise(n = n()) %>%
  group_by(option) %>%
  mutate(percentage = n/sum(n)*100) %>%
  filter(value == 1) %>%
  ggplot(aes(x = factor(option), y = percentage, fill = factor((value-2)*-1))) +
  geom_bar(stat = "identity")