我正在使用the jbryer/likert package绘制李克特数据。

考虑一个称为items的响应表,此处的AB等是列名,而不是数据的一部分:

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)

这给了我:

凉爽的。全部订购。但是AB等作为条件的描述符没有意义,我想重写它们:
names(items) = c("LT", "ST", "SemTag", "SemTagContext")

这给了我错误的顺序:

尽管STB的名称,但看看B是如何出现的?我的订购已更改为DCAD

如何保留顺序并返回CBASemTagContext或带有我新的组名的条形码:SemTagSTLT,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/

10-11 10:20