我有一个数据结构,我需要通过一列中的变量和另一列中的变量来绘制二元组。例如,假设我有一个调查,一栏是关于学生对“强烈同意”,“同意”,“中立”,“不同意”和“非常不同意”作为选项的课程的看法。在另一栏中,我有参加调查的人的成绩水平。我如何整理和绘制这些数据,以便我可以显示一个年级中有多少人表示“非常同意”,一个年级中有多少人对所有成绩说“同意”等等?
示例数据:
set.seed(123)
feelops <- c("strongly agree", "agree", "neutral", "disagree", "strongly disagree")
feelops <- ordered(feelops,levels=feelops)
dat <- data.frame(feel=sample(feelops,100,replace=TRUE) , grade=sample(LETTERS[1:5],100,replace=TRUE))
> head(dat)
feel grade
1 agree C
2 disagree B
3 neutral C
4 strongly disagree E
5 strongly disagree C
6 strongly agree E
答案 0 :(得分:1)
使用barplot
和示例数据,这样的事情可能会起作用:
barplot(
with(dat,prop.table(table(feel,grade))),
beside=TRUE,
xlab="Grade",
ylab="% Feeling Within Grade Group",
col=grey((1:5)/5)
)
legend("topright",as.character(feelops),fill=grey(1:5/5))
您可以稍微使用这些选项,但这会产生类似的结果:
答案 1 :(得分:1)
另一种选择是使用更高级别的地图套餐,例如ggplot2
或lattice
。它们比基础包更灵活。在这里,我使用barchart
创建2个版本的条形图。第二个使用reshape2
以更长的格式放置数据,通常更适合这种情节。
library(lattice)
library(reshape2)
library(gridExtra)
dat1 <- with(dat,prop.table(table(grade,feel)))
p1 <- barchart(dat1, groups=0)
dat.m <- melt(dat1)
p2 <- barchart(value~grade,groups=feel,data= dat.m, auto.key=TRUE)
grid.arrange(p1,p2)