我正在使用the jbryer/likert
package绘制李克特数据。
考虑一个称为items
的响应表,此处的A
,B
等是列名,而不是数据的一部分:
A B C D
5 4 5 4
3 3 3 4
2 2 2 2
2 2 2 3
5 3 6 7
3 3 5 4
和以下代码:
choices = c("Very low", "Low", "Rather low", "Neither low nor high", "Rather high", "High", "Very high")
for(i in 1:ncol(items)) {
items[,i] = factor(items[,i], levels=1:7, labels=choices, ordered=TRUE)
}
现在,我们将其转换为
likert
数据并对其进行绘制,该数据会使用ggplot
覆盖内置的plot函数:plot(likert(items), ordered=FALSE)
这给了我:
凉爽的。全部订购。但是
A
,B
等作为条件的描述符没有意义,我想重写它们:names(items) = c("LT", "ST", "SemTag", "SemTagContext")
这给了我错误的顺序:
尽管
ST
是B
的名称,但看看B
是如何出现的?我的订购已更改为D
,C
,A
和D
。如何保留顺序并返回
C
,B
,A
,SemTagContext
或带有我新的组名的条形码:SemTag
,ST
,LT
,ojit_code?注意:以上数据表已缩短。图中的条形宽度不反射(reflect)此简短的数据示例,但反射(reflect)了我拥有的完整数据集。问题是一样的。
最佳答案
正如乔恩建议的那样,我决定自己重新实现此功能:
# additional requirements
library(ggplot2)
library(reshape2)
library(RColorBrewer)
# create summary table
table_summary = likert(items)
# reshape results
results = melt(table_summary$results, id.vars='Item')
# reorder results
results$Item = factor(results$Item, levels=c("LT", "ST", "SemTag", "SemTagContext"))
# some defaults
ymin = 0
text.size = 3
ggplot(results, aes(y=value, x=Item, group=Item)) +
geom_bar(stat='identity', aes(fill=variable)) +
ylim(c(-5,105)) +
coord_flip() +
scale_fill_manual('Response', values=brewer.pal(7, "RdYlGn"),
breaks=levels(results$variable),
labels=levels(results$variable)) +
geom_text(data=table_summary$summary, y=ymin, aes(x=Item,
label=paste(round(low), '%', sep='')),
size=text.size, hjust=1) +
geom_text(data=table_summary$summary, y=100, aes(x=Item,
label=paste(round(high), '%', sep='')),
size=text.size, hjust=-.2) +
ylab('Percentage') + xlab('')
这将产生正确的顺序:
关于r - 用R重新排序李克特图中的组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14415674/