我有一个来自调查的数据库,从这个数据库我在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中是否有更好的选择。
更新
完成上述所有操作后,我想提出几个问题来创建一个如下所示的条形图:
在上面的示例中,对问题8的回答中,等于1的标记被标记为 - &#34;我的银行已经......&#34;和&#34;我的银行正在启动时,响应等于2 ...&#34;如上图所示。
然而,我们可以忽略&#34;标签部分&#34;目前,因为在x轴上只放置1和2就足够了。
答案 0 :(得分:0)
这是ggplot
的快速回答library(ggplot2)
ggplot(df, aes(x=Question, fill=factor(Answer))) + geom_bar()
输出如下:
计算百分比:
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()
编辑:已添加以解决更新的问题:
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"))