在R中显示包成象的百分比

时间:2018-07-18 17:58:42

标签: r

我有一个包含6个问题和6个答案的数据集,范围从1(非常差)到6(非常好)。可以使用李克特图将其可视化。 假设数据如下所示:

d1<-data.frame(1=c(1,2,3,4,5,NA),2=c(1,2,3,4,5,6),3=c(1,2,3,4,5,6),4=c(1,2,3,4,5,6),5=c(1,2,3,4,5,6),6=c(1,2,3,NA,5,6))

要使用Likert,我必须将所有数字都转换为因数,并且只有在我先将数字转换为字母后才能以某种方式起作用

d1[d1[1:6,1:6]==1]<-"Level 1"
d1[d1[1:6,1:6]==2]<-"Level 2"
d1[d1[1:6,1:6]==3]<-"Level 3"
d1[d1[1:6,1:6]==4]<-"Level 4"
d1[d1[1:6,1:6]==5]<-"Level 5"
d1[d1[1:6,1:6]==6]<-"Level 6"

然后将它们定义为因素:

d1<-data.frame(E1=as.factor(d1$1),E2=as.factor(d1$2),E3= as.factor(d1$3),E4=as.factor(4), E5=as.factor(d1$5),E6=as.factor(d1$6))

然后使用likert包,如下所示:

d2<-likert(d1)
plot(d2, ordered=F)

输出是这样的(不同的值) enter image description here 一切都很好,但是,我需要为每个栏添加百分比。我已经找到了plot.percents选项,可以将其设置为TRUE,但是它不起作用,即使它是在likert的文档中编写的,也没有作为选项显示。 我也看过这篇文章:here,我尝试过,它说尺寸太小了……我假设他的代码是为5个可能的答案而设计的,而对我来说是6个。

1 个答案:

答案 0 :(得分:1)

似乎likertHH软件包都使用likert()时有些混淆。可能所有变量都应具有相同数量的因子水平(本例中为6)。

否则,即使在您的项目中,@ digEmAll的代码也可以正常工作。

首先,只需保存原始标签。

yLabels <- colnames(df1)

然后用round(., 0)或类似的方法来适应function in line 40

DF$perc <- round(ave(DF$abs, DF$y, FUN=function(x) x/sum(x) * 100), 0)  # line 40

然后,将likert()单独引用的两个::组合在一起。

library(likert)
library(HH)
HH::likert(likert::likert(df1),
           scales = list(y = list(labels = yLabels)),
           main="My Plot",
           panel=myPanelFunc,  # @digEmAll's fun applied
           sub="Response")

结果

enter image description here

数据

df1 <- data.frame(matrix(rep(paste("Level", 1:6), 6), ncol=6))
df1[6, 1] <- df1[4, 6] <- NA

> df1
       X1      X2      X3      X4      X5      X6
1 Level 1 Level 1 Level 1 Level 1 Level 1 Level 1
2 Level 2 Level 2 Level 2 Level 2 Level 2 Level 2
3 Level 3 Level 3 Level 3 Level 3 Level 3 Level 3
4 Level 4 Level 4 Level 4 Level 4 Level 4    <NA>
5 Level 5 Level 5 Level 5 Level 5 Level 5 Level 5
6    <NA> Level 6 Level 6 Level 6 Level 6 Level 6