对数据集中出现某个值的频率绘制时间图

时间:2019-07-02 23:59:13

标签: r

我有一个关于大学学生身体的数据集,其中有10列,分别代表不同的因素,例如学生身份,性别,种族等。

目前,我只是对他们被录取的术语以及他们的种族感兴趣,因为我想了解不同种族背景的学生人数随着时间的变化。因此,我创建了一个新数据框,其中包含两列,名为ethnalitydf:

> head(ethnicitydf)
  admit_term                  ethn_desc
1 2011-10-01            White/Caucasian
2 2011-10-01 Filipino/Filipino-American
3 2011-10-01            White/Caucasian
4 2011-10-01       Latino/Other Spanish
5 2011-10-01      East Indian/Pakistani
6 2011-10-01            White/Caucasian

我不确定如何创建在x轴上具有admit_term(时间)以及每个admit_term出现每种种族的频率的图。第二列中有12个独特的种族,我想在一张图表中显示每个adterm_term(总共6个词)的全部12个种族的发生频率,每种种族都有不同的颜色。

我想到的第一步是使用length(which(ethnicitydf$admit_term == "2011-10-01" & ethnicitydf$ethn_desc == "White/Caucasian"))来计算每个学期的每个种族,并将数据记录在新的数据框中,但是我觉得应该有一个更快,更有效的方法这个。也许使用包装?有人可以帮助我吗?谢谢!

1 个答案:

答案 0 :(得分:2)

条形图将为您完成计数。

library(ggplot2)

ethnicitydf <- data.frame(admit_term = sample(c("2011-10-01","2012-10-01","2013-10-01"), 100, TRUE),
                          ethn_desc =sample(c("White/Caucasian","Filipino/Filipino-American","East Indian/Pakistani"), 100, TRUE))

ggplot() +
    geom_bar(data=ethnicitydf, mapping=aes(x=admit_term, fill=ethn_desc), position="dodge")

reprex package(v0.3.0)于2019-07-03创建

如果您有很多序列,也可以像这样绘制点。

ggplot() +
    geom_point(data=ethnicitydf, mapping=aes(x=admit_term, colour=ethn_desc), stat="count")

要获取行,您需要确保y轴为数字(将文本日期转换为数字,例如年份)。

ethnicitydf$admit_term <- as.Date(ethnicitydf$admit_term)

ggplot() +
    geom_line(data=ethnicitydf, mapping=aes(x=admit_term, colour=ethn_desc), stat="count") +
    geom_point(data=ethnicitydf, mapping=aes(x=admit_term, colour=ethn_desc), stat="count")