使用sum而不是count来绘制分箱数据

usr*_*usr 1 r data-visualization histogram bar-chart

我试图寻找答案,但似乎找不到适合我的工作.

我有一个data包含两个变量的数据集():人的年龄(age)和奖励数(awards)

我的目标是在R.FYI中绘制年龄奖励的数量,一个人可以有多个奖项,人们可以拥有相同的年龄.

我试图绘制直方图和条形图,但问题在于它计算观察数而不是总计奖励数.

样本数据集:

age <- c(21,22,22,25,30,34,45,26,37,46,49,21)
awards <- c(0,3,2,1,0,0,1,3,1,1,1,1)
data <- data.frame(cbind(age,awards))
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是一个代表这些数据的直方图(或条形图).

理想情况下,我希望将年龄分成年龄组.例如,20-30,31-40,41-50,然后是每个组的奖励总数.

年龄组将在x轴上,每个年龄组的奖励总数将在y轴上.

谢谢!

bou*_*all 6

我们可以使用该aggregate函数然后使用该ggplot2包.R这些天我没有在基地制作太多的地图,所以我不确定没有加载的最佳方法ggplot2:

创建样本数据

#data
set.seed(123)
dat <- data.frame(age = sample(20:50, 200, replace = TRUE),
                  awards = rpois(200, 3))
head(dat)
  age awards
1  28      2
2  44      6
3  32      3
4  47      3
5  49      2
6  21      5
Run Code Online (Sandbox Code Playgroud)

按年龄

#aggregate

sum_by_age <- aggregate(awards ~ age, data = dat, FUN = sum)

library(ggplot2)

ggplot(sum_by_age, aes(x = age, y = awards))+
    geom_bar(stat = 'identity')
Run Code Online (Sandbox Code Playgroud)

年龄情节

按年龄组

#create groups

dat$age_group <- ifelse(dat$age <= 30, '20-30',
                        ifelse(dat$age <= 40, '30-40',
                               '41 +'))

sum_by_age_group <- aggregate(awards ~ age_group, data = dat, FUN = sum)

ggplot(sum_by_age_group, aes(x = age_group, y = awards))+
    geom_bar(stat = 'identity')
Run Code Online (Sandbox Code Playgroud)

年龄组情节

注意

我们可以aggregate完全跳过这一步,只需使用:

ggplot(dat, aes(x = age, y = awards)) + geom_bar(stat = 'identity')
Run Code Online (Sandbox Code Playgroud)

年龄积不合计

但我不喜欢这种方式,因为我认为有一个中间数据步骤可能在您的分析管道中用于除可视化之外的比较.