r - Tidyverse : Converting numerical data into categorical data for plotting with uneven bin width

标签 r ggplot2 categorical-data continuous

我希望使用 tidyverse 离散化数值数据,目的是使用条形图绘制不同的数值范围,就好像数据是分类的一样,通过手动声明切割发生的位置,例如年龄组或收入范围。我希望间隔宽度不等。

到目前为止,我已经尝试了基本的 R 方法,使用 cut() 并使用 breaks = c() 设置 bin。但是,我注意到 ggplot2 包中存在一组函数 cut_intervalcut_widthcut_number .我认为有一种方法可以使用这些函数手动设置间隔切割,因为 breaks 参数存在于间隔和数字变体。

library(tidyverse)

mtcars <- as_tibble(mtcars)

mtcars %>% 
  count(cut_interval(mpg, n = 4))
#> # A tibble: 4 x 2
#>   `cut_interval(mpg, n = 4)`     n
#>   <fct>                      <int>
#> 1 [10.4,16.3]                   10
#> 2 (16.3,22.1]                   13
#> 3 (22.1,28]                      5
#> 4 (28,33.9]                      4

mtcars %>% 
  count(cut_interval(mpg, n = 4, breaks = c(10, 18, 23, 28, 35)))
#> Error: Evaluation error: lengths of 'breaks' and 'labels' differ.

reprex package 创建于 2019-06-03 (v0.2.1)

上面的内容接近我想要的,但是它根据间隔数设置了中断。

在上面的例子中,我希望我的分组完全如下:

10-18、19-23、24-28、29-35。

是否可以使用 breaks 参数?谢谢。

最佳答案

您可以只使用实际的基本 cut 函数来执行此操作:

library(tidyverse)

mtcars %>% 
    mutate(bin = cut(mpg, breaks = c(Inf, 10, 18, 19, 23, 24, 28, 29,35))) %>% 
    count(bin)

这会给你:

# A tibble: 5 x 2
  bin         n
  <fct>   <int>
1 (10,18]    13
2 (18,19]     2
3 (19,23]    10
4 (24,28]     3
5 (29,35]     4

关于r - Tidyverse : Converting numerical data into categorical data for plotting with uneven bin width,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56432562/

相关文章:

R - 按组有条件地对多列进行升序或降序排序

r - 在时间戳的一列上使用 difftime 计算时间的运行差异

r - ggplot 将 geom_segment 显示为点序列

r - 根据列的值是否在列的顶部 X 中选择行

r - 如何为日期滑动输入

r - 在同一页面上绘制多个 ggplot2

r - 使用arrangeGrob添加子图作为图例

R:从数值变量和自定义/开放式/单值区间创建分类变量

python - 使用 LSTM 和 keras 进行时间序列预测的分类变量

machine-learning - 我如何将 30 个类别转换为 scikit 的数字