我对R来说比较新,而且是ggplot的初学者,但是我还没有找到答案来解决我看似简单的问题。使用ggplot,我想制作一个条形图,其中三个或更多绘制的因子级别中的两个堆叠。
基本上,这是我正在查看的数据类型:
df <- data.frame(Answer=c("good","good","kinda good","kinda good",
"kinda good","good","bad","good","bad"))
这为我提供了三个级别的因子,其中两个非常相似:
Answer
1 good
2 good
3 kinda good
4 kinda good
5 kinda good
6 good
7 bad
8 good
9 bad
如果我让ggplot现在为我查看这些数据,
c <- ggplot(df, aes(df$Answer))
c + geom_bar()
我会得到一个包含三列的条形图。但是,我想最后得到两个列,其中一列应该是两个因子级别的堆栈“好”和“有点好”,仍然明显分开。
我正在使用100列输入(正字法研究),我需要手动完成,因此我希望尽可能轻松地调整代码。其中一些有十多个级别,我需要将它们分成三列。因此,在大多数情况下,我的数据更可能如下所示:
df <- data.frame(Answer=c("good","goood","goo0d","good",
"I don't know","Bad","bad","baaad","really bad"))
我会把它归为三类。在大约一半的情况下,我仍然可以使用模式匹配进行过滤,因为我将查看空间的使用。然而,另一半正在考虑资本化,这会变得有点混乱,或者至少非常繁琐。
我想到了两种不同的方法来更有效地解决这个问题:
只需重写因子级别,但这会导致信息丢失(我希望将这两个级别分开)。我想保留原始级别名称,因为我认为我需要它们来绘制堆叠列中的比率并正确标记列。
我可以将相应的列/因子分成两个独立的列/因子,并将它们彼此相邻绘制,从而创建一个“假的”第三维。这看起来是最有前途的方法,但是在我使用它完成100列数据之前 - 是否有更优雅的方法,可能在ggplot2包中,我可以只指向/分组级别名称而不是更改/重新排序它背后的数据框架?
谢谢!
答案 0 :(得分:2)
您可以尝试以下方法,以便在分组答案时采用更自动化的方法。
我们根据您的数据选择一些关键字并循环显示,以查看哪些答案可能包含每个关键字
groups <- c('good','bad','ugly','know')
df <- data.frame(Answer=c("good","medium good","kinda good","still good",
"I don't know","good","bad","good","really bad"))
idx <- sapply(groups, function(x) grepl(x, df$Answer, ignore.case = TRUE))
df$group <- rep(colnames(idx), nrow(idx))[t(idx)]
df
# Answer group
# 1 good good
# 2 medium good good
# 3 kinda good good
# 4 still good good
# 5 I don't know know
# 6 good good
# 7 bad bad
# 8 good good
# 9 really bad bad
library('ggplot2')
ggplot(df, aes(group, fill = Answer)) + geom_bar()