使用NAs可视化Likert数据(箱线图、条形图)

使用NAs可视化Likert数据(箱线图、条形图),r,ggplot2,bar-chart,boxplot,likert,R,Ggplot2,Bar Chart,Boxplot,Likert,这个问题是我之前提出的关于Likert数据可视化问题的扩展。有关详细信息和简单示例,请参见链接 假设我们有一个数据框mydata,看起来像这样(用likert量表1-5回答问题),由几个人组成p: P Q1 Q2 ... 1 1 4 1 2 2 3 4 3 NA 1 4 利用 prepareddatabarplot <- select(mydata,P,Q1,Q2) %>% gather(key='Question_nu

这个问题是我之前提出的关于Likert数据可视化问题的扩展。有关详细信息和简单示例,请参见链接

假设我们有一个数据框
mydata
,看起来像这样(用likert量表1-5回答问题),由几个人组成p:

 P   Q1  Q2 ...
  1   1   4    1
  2   2   3    4
  3   NA   1    4
利用

prepareddatabarplot <- select(mydata,P,Q1,Q2) %>% gather(key='Question_num', value='Antwort', -P)
要清除所有NAs。现在我想要一个堆叠的条形图(每个问题都有一个垂直的条形图),其中每个答案的百分比(1-5,例如“完全同意”、“完全不同意”等)被绘制到条形图中,就像在帖子底部的答案一样。 首先,作者使用了

    ggplot(questions, aes(x=Question_num)) +
  geom_bar(aes(fill=Answer)) +...
当我的数据帧中有NAs时,
fill=Answer
工作正常,我的理解正确吗?我的意思是:如果在Q1中有5个NA(10个答案“1”和5个答案“2”),在Q2中有0个NA(15个答案“1”和5个答案“2”),那么Q1的10个有效答案“1”是否显示为整个垂直条的2/3,其高度与Q2中的条相同?

那里的作者使用

aes(y=freq, label=percent(freq/20,1), group=Answer)
要计算给出的百分比,有20人回答问题。Freq是每个答案的计数(答案可能性为1,2,3,4,5或表示“完全同意”等)。问题是,这只适用于没有NA的数据,因为这样可以将freq除以20,因为每个问题有20个有效答案

如果存在NA,我该如何处理?因此,对于堆叠条形图中显示的每个问题,有效答案的数量可能会有所不同。

这是我问题的第一部分。第2部分:这是同一个问题,但有一个考虑到答案(1-5)各自值的箱线图。我在一个图表中为每个问题绘制两个方框图,每个方框图相邻

再次提到我的数据中有“NA”下面的代码是否考虑到了,例如,如果使用
drop.NA()
删除整理数据中的NA并相应地绘制方框图,那么在
Q1
(使用前面的示例)中,会减少5个值-也就是说,对于Q1只使用15个答案,对于Q2只使用20个答案:

  preparedataboxplot <- select(mydata,P,Q1,Q2,) %>% gather(key='Question_num', value='Antwort', -P)
#preparedataboxplot <- preparedataboxplot %>% drop_na()
preparedataboxplot$Antwort<-unlist(preparedataboxplot$Antwort)


    ggplot(preparedataboxplot,aes(x=factor(Question_num),y=Antwort))+
      stat_boxplot(geom='errorbar',width=0.8)+
      geom_boxplot(width=0.8)
preparedataboxplot%聚集(key='Question\u num',value='Antwort',-P)
#preparedataboxplot%下降量_na()
已制备TaboxPlot$Antwort
  preparedataboxplot <- select(mydata,P,Q1,Q2,) %>% gather(key='Question_num', value='Antwort', -P)
#preparedataboxplot <- preparedataboxplot %>% drop_na()
preparedataboxplot$Antwort<-unlist(preparedataboxplot$Antwort)


    ggplot(preparedataboxplot,aes(x=factor(Question_num),y=Antwort))+
      stat_boxplot(geom='errorbar',width=0.8)+
      geom_boxplot(width=0.8)