我有一个包含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)
输出是这样的(不同的值) 一切都很好,但是,我需要为每个栏添加百分比。我已经找到了plot.percents选项,可以将其设置为TRUE,但是它不起作用,即使它是在likert的文档中编写的,也没有作为选项显示。 我也看过这篇文章:here,我尝试过,它说尺寸太小了……我假设他的代码是为5个可能的答案而设计的,而对我来说是6个。
答案 0 :(得分:1)
似乎likert
和HH
软件包都使用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")
结果
数据
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