【问题标题】:How to create a graph based on 5 years interval in R如何在 R 中创建基于 5 年间隔的图表
【发布时间】:2021-08-26 02:04:33
【问题描述】:

我有两列,一列是年龄,另一列是百分比。我需要绘制一个图表,显示每 5 年间隔的百分比总和的分布情况。

df$group <- cut(df$age, breaks = seq(0,120,by=5), right = TRUE)

我使用上面的代码将年龄按每 5 个间隔分组,然后使用 group by(age) 和 summarise(sum=sum(percentage) 对每 5 个间隔的所有百分比求和。但是,我无法这样做是因为“分组依据”不能对分类变量起作用,你知道更好的方法吗? 如果df是:

df <- data.frame(age=c(2,4,6,8), percentage=c(2,3,6,7))

并按分组(年龄)和汇总(总百分比)转换为以下 年龄(0-5, 5-10), 总和百分比(5,13)

但是,我需要以下内容: 年龄(5,10),总和百分比(5,13)

【问题讨论】:

  • However, I'm not able to do that as a "group by" can not work on a categorical variable 是什么意思?如果您创建一个小的可重现示例以及预期的输出,这将更容易提供帮助。阅读how to give a reproducible example
  • 您的方法似乎有问题,但缺少一些关键信息。最重要的是,您需要共享数据、语法和错误。那么问题可能很容易解决。
  • 我怀疑您的“百分比”实际上是一个字符值“5%”与 0.05 不同。因此,我认为您必须先将百分比转换为数字,然后才能将它们加在一起。
  • 你能解释一下吗,我是 R 的新手

标签: r graph group-by intervals summarize


【解决方案1】:

您可以创建一个带有组的新变量,然后使用aggregate 按组聚合百分比值并求和:

df = data.frame(age=c(2,4,6,8), percentage=c(2,3,6,7))
df$age.group = cut(df$age,seq(0,120,5))

sums = aggregate(percentage ~ age.group,FUN=sum,data=df)

结果将是:

> df
  age percentage age.group
1   2          2     (0,5]
2   4          3     (0,5]
3   6          6    (5,10]
4   8          7    (5,10]

> sums
  age.group percentage
1     (0,5]          5
2    (5,10]         13

【讨论】:

  • 感谢您的帮助,但聚合代码对我不起作用
  • 应该的。这是一个基本功能。 “不工作”是什么意思?也许,语法有问题。
  • 运行聚合代码后,df没有任何变化,我的意思是百分比没有汇总
  • 当然不是。 aggregate() 的结果存储在名为 sums 的新数据框中。原始数据框df 不受影响。
  • 真可惜!非常感谢,再问一个问题,如何将区间从 ((0,5],(5,10]) 更改为 (5, 10),我的意思是区间中的最高数字
猜你喜欢
  • 1970-01-01
  • 2019-01-16
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-28
相关资源
最近更新 更多