R 在单个图表上打印具有多个条件的数据

R 在单个图表上打印具有多个条件的数据,r,ggplot2,R,Ggplot2,我正在尝试使用ggplot2绘制一个图,其中并排的条形图是根据某些条件生成的,这些条件可以从数据中计算出来。我怀疑问题在于正确格式化数据,以便ggplot能够提供我想要的内容。但我这辈子都做不好 我所拥有的是一个数据框,里面有学生每次在学校上课时的行。感兴趣的变量有Student.ID、Course.ID、Session、Fiscal.Year和Facility。每一行都是一个学生参加课程的实例,并告诉他们参加了什么课程,他们在哪里参加了课程,等等。据我所知,这是数据长格式所需的条件(如果我错了

我正在尝试使用ggplot2绘制一个图,其中并排的条形图是根据某些条件生成的,这些条件可以从数据中计算出来。我怀疑问题在于正确格式化数据,以便ggplot能够提供我想要的内容。但我这辈子都做不好

我所拥有的是一个数据框,里面有学生每次在学校上课时的行。感兴趣的变量有Student.ID、Course.ID、Session、Fiscal.Year和Facility。每一行都是一个学生参加课程的实例,并告诉他们参加了什么课程,他们在哪里参加了课程,等等。据我所知,这是数据长格式所需的条件(如果我错了,请纠正我)。唯一可能有NA值的字段是Facility,但我计划从绘图中排除这些字段,以便您可以将数据帧视为完全填充


我想做的是绘制一个图表,显示每个财政年度有多少门课程需要这样做吗

扩展数据

> dput(df)
structure(list(ID = c(101L, 102L, 103L, 104L, 101L, 102L, 103L, 
101L, 102L, 103L, 101L, 102L, 101L, 102L, 101L, 102L, 101L, 102L, 
103L, 104L, 101L, 102L, 103L, 101L, 102L, 103L, 101L, 102L, 101L, 
102L, 101L, 102L, 101L, 102L, 103L, 104L, 101L, 102L, 103L, 101L, 
102L, 103L, 101L, 102L, 101L, 102L, 101L, 102L), CourseID = c(1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L), 
    Session = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 
    2L, 2L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 
    1L, 2L, 2L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
    1L, 1L, 2L, 2L, 3L, 3L), Fiscal.Year = c("FY13", "FY13", 
    "FY13", "FY13", "FY13", "FY13", "FY13", "FY13", "FY13", "FY13", 
    "FY13", "FY13", "FY13", "FY13", "FY13", "FY13", "FY14", "FY14", 
    "FY14", "FY14", "FY14", "FY14", "FY14", "FY14", "FY14", "FY14", 
    "FY14", "FY14", "FY14", "FY14", "FY14", "FY14", "FY15", "FY15", 
    "FY15", "FY15", "FY15", "FY15", "FY15", "FY15", "FY15", "FY15", 
    "FY15", "FY15", "FY15", "FY15", "FY15", "FY15")), .Names = c("ID", 
"CourseID", "Session", "Fiscal.Year"), class = "data.frame", row.names = c(NA, 
-48L))

df
    ID CourseID Session Fiscal.Year
1  101        1       1        FY13
2  102        1       1        FY13
3  103        1       1        FY13
4  104        1       1        FY13
5  101        2       1        FY13
6  102        2       1        FY13
7  103        2       1        FY13
8  101        2       2        FY13
9  102        2       2        FY13
10 103        2       2        FY13
11 101        3       1        FY13
12 102        3       1        FY13
13 101        3       2        FY13
14 102        3       2        FY13
15 101        3       3        FY13
16 102        3       3        FY13
17 101        1       1        FY14
18 102        1       1        FY14
19 103        1       1        FY14
20 104        1       1        FY14
21 101        2       1        FY14
22 102        2       1        FY14
23 103        2       1        FY14
24 101        2       2        FY14
25 102        2       2        FY14
26 103        2       2        FY14
27 101        3       1        FY14
28 102        3       1        FY14
29 101        3       2        FY14
30 102        3       2        FY14
31 101        3       3        FY14
32 102        3       3        FY14
33 101        1       1        FY15
34 102        1       1        FY15
35 103        1       1        FY15
36 104        1       1        FY15
37 101        2       1        FY15
38 102        2       1        FY15
39 103        2       1        FY15
40 101        2       2        FY15
41 102        2       2        FY15
42 103        2       2        FY15
43 101        3       1        FY15
44 102        3       1        FY15
45 101        3       2        FY15
46 102        3       2        FY15
47 101        3       3        FY15
48 102        3       3        FY15
用dplyr对其进行总结

d1 <- df %>%
  group_by(CourseID, Session, Fiscal.Year) %>%
  summarise(n=length(ID))
d1%
分组依据(课程、会议、财政年度)%>%
总结(n=长度(ID))
再三

d2 <- d1 %>%
  group_by(Fiscal.Year) %>%
  summarise(d1 = length(n[n <= 2]),
            d2 = length(n[n <  4]),
            d3 = length(n[n <= 4])
  )
library(reshape2)
d3 <- melt(d2)
ggplot(d3, aes(Fiscal.Year, value, fill = variable)) +
  geom_bar(stat = 'identity', position = 'dodge')
d2%
集团单位(会计年度)%>%

总结(d1=长度(n[n您能提供一些真实数据或更接近它的数据吗?
summary(n=长度(ID))
可以是
summary(n=n())
@jazzurro true!但对我来说,这个习语并不是最具教育意义的。这看起来很像我想要的!我回来后必须在工作中测试它,但我没有想到使用plyr两次,然后将结果融化回数据框中。另外,%%>%应该是%.%吗?如果不是,%>%到底做了什么?不管怎样,这都解决了一个问题我在过去的一周里一直没有弄清楚,所以谢谢你!我会测试它,并在一切检查完毕后接受。@KyleSykes是的,%%>%应该是%.%.同样的行为。dplyr的习惯用法是接受使用%>%这样的管道。@KyleSykes你有没有让它工作并设法对最终的情节进行分面处理?