自动为 r 中的数值变量创建 bin

Automatically creating bins for a numeric variable in r

所以我有一个变量如下。

var <- c(0L, 5L, 4L, 115L, 0L, 0L, 0L, 2L, 365L, 4L, 20L, 61L, 365L, 
0L, 365L, 0L, 14L, 0L, 0L, 72L, 0L, 0L, 6L, 105L, 150L, 0L, 365L, 
0L, 1L, 28L, 161L, 6L, 0L, 2L, 12L, 0L, 10L, 49L, 7L, 2L, 51L, 
0L, 0L, 11L, 0L, 0L, 17L, 0L, 0L, 7L, 0L, 28L, 0L, 0L, 0L, 44L, 
0L, 3L, 0L, 0L, 0L, 1L, 1L, 0L, 4L, 87L, 0L, 321L, 0L, 0L, 0L, 
0L, 9L, 0L, 0L, 0L, 140L, 0L, 0L, 0L, 0L, 0L, 1L, 8L, 20L, 0L, 
4L, 14L, 3L, 0L, 0L, 0L, 39L, 4L, 9L, 0L, 0L, 0L, 1L, 7L)

我想创建不同大小(或相同大小)的 bin 来对此变量进行分类并绘制为条形图。

我知道可以找到 automatic/reccommended 分箱,但是我不确定如何在 R 中这样做?

尝试使用 bin() 函数无效。我也读到了 Jenks 方法,但是有没有一种方法可以在 R 中创建尽可能好的容器?

想用它在 ggplot 中绘制条形图。

您的描述听起来像是您想要绘制 var 的直方图。这可以在 ggplot 中使用 geom_histogram 轻松完成。这里的关键是 ggplot 喜欢有一个数据框,所以你只需要先在数据框中指定你的变量,你可以在 ggplot() 函数中做:

ggplot(data.frame(var), aes(var)) + geom_histogram(color='black', alpha=0.2)

给你这个:

默认使用 30 个 bin,但您可以通过 bins= 指定 bin 的数量或通过 binwidth=:

指定 bin 的大小
ggplot(data.frame(var), aes(var)) + geom_histogram(bins=10, color='black', alpha=0.2)

如果您想绘制基本的条形图,那么 geom_histogram() 就可以了。如果您改为使用 stat_bin() 函数,它将执行相同的装箱方法,但是您可以根据需要应用和使用不同的 geom:

ggplot(data.frame(var), aes(var)) +
  stat_bin(geom='area', bins=10, alpha=0.2, color='black')

如果您只想从“分箱”变量中获取 numbers/data,最简单的方法之一可能是使用 dplyr 中的 cut()

cut() 的使用非常简单。您指定向量和 breaks= 参数。中断可以指定为您要“剪切”数据(或“分箱”数据)的位置列表,或者您可以只设置 breaks=10,它将为您提供 10 个分箱的均匀剪切集。结果是 factorlevels=,对应于每个中断的范围。在 varbreaks=10 的情况下,您将得到以下内容:

> var_cut <- cut(var, breaks = 10)
> levels(var_cut)
 [1] "(-0.365,36.5]" "(36.5,73]"     "(73,110]"      "(110,146]"     "(146,182]"     "(182,219]"     "(219,256]"    
 [8] "(256,292]"     "(292,328]"     "(328,365]"