使用分类数据和图表绘制的调查分析

时间:2016-05-17 09:21:30

标签: r plot dataframe calculated-columns survey

我有一个来自调查的数据库,从这个数据库我在R中构建了一个类似于这个的数据框:

    cnt  <-as.factor(c("Country 1", "Country 2", "Country 3", "Country 1", "Country 2", "Country 3" ))
    bnk  <-as.factor(c("bank 1", "bank 2", "bank 3", "bank 1", "bank 2", "bank 3" ))
    qst  <-as.factor(c("q1", "q1", "q1", "q2","q2","q2" ))
    ans  <-as.numeric(c(1,1,2,1,2,3))
    df   <-data.frame(cnt, bnk, qst,ans)
names(df) <- c("Country", "Institute", "Question", "Answer")

      Country Institute Question Answer
1 Country 1    bank 1       q1      1
2 Country 2    bank 2       q1      1
3 Country 3    bank 3       q1      2
4 Country 1    bank 1       q2      1
5 Country 2    bank 2       q2      2
6 Country 3    bank 3       q2      3

基本上这个数据框显示有两个不同的问题 - q1,q2,其中参与者 - 来自不同国家的银行 - 必须以一定的数字尺度回答每个问题。

我的目的很简单。我希望,每个问题,计算然后绘制回答1的银行百分比,他们的回答率为2,等等。

因此,在我们的例子中,有三家银行。关于问题1,其中2个回答1,1回答2.因此,我想想象 - 例如通过条形图 - 有2/3个银行(即aprx.67%)回答1和1/3(即aprx.33%)回答2.类似于问题2.

不确定,是否重要,但可能的数字答案的范围可能会根据问题而有所不同。也就是说,对于q1,可用答案的范围是1到2,但问题2的范围可以是1到5.

有人可以建议我如何在R中快速实现这个吗?

当然,一种肮脏的方式是计算银行的数量,计算&#34;的数量&#34;在q1(q2)中然后计算各个分数。然而,这种方法非常耗时,并且想知道R中是否有更好的选择。

更新

完成上述所有操作后,我想提出几个问题来创建一个如下所示的条形图:

enter image description here

在上面的示例中,对问题8的回答中,等于1的标记被标记为 - &#34;我的银行已经......&#34;和&#34;我的银行正在启动时,响应等于2 ...&#34;如上图所示。

然而,我们可以忽略&#34;标签部分&#34;目前,因为在x轴上只放置1和2就足够了。

1 个答案:

答案 0 :(得分:0)

这是ggplot

的快速回答
library(ggplot2)

ggplot(df, aes(x=Question, fill=factor(Answer))) + geom_bar()

输出如下:

enter image description here

计算百分比:

library(dplyr)
library(tidyr)

(dat <- df %>% spread(Question, Answer))
    Country Institute q1 q2
1 Country 1    bank 1  1  1
2 Country 2    bank 2  1  2
3 Country 3    bank 3  2  3

dat$q1 %>% table/nrow(dat)
        1         2 
0.6666667 0.3333333 

dat$q2 %>% table/nrow(dat)

        1         2         3 
0.3333333 0.3333333 0.3333333 

编辑:添加以下评论的情节

ggplot(df, aes(x=Answer, fill=factor(Question))) + geom_bar()

enter image description here

编辑:已添加以解决更新的问题:

df <- data.frame(answer=c(rep(1, 97), rep(2,3)))

ggplot(df, aes(x=as.factor(answer))) + 
  geom_bar(aes(y=(..count..)/sum(..count..)), width=.5) + 
  scale_y_continuous(labels = scales::percent) +
  geom_text(aes(y = ((..count..)/sum(..count..)), label = scales::percent((..count..)/sum(..count..))), stat = "count", vjust = -0.25) +
  labs(title = "Question 8", y = "Percent", x = "") +
  scale_x_discrete(labels=c("My bank has been using \n guarantees already for \n more than 5 years", "My bank has started to use \n guarantees in their last 5 year")) 

enter image description here