自动为 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 个分箱的均匀剪切集。结果是 factor
和 levels=
,对应于每个中断的范围。在 var
和 breaks=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]"
所以我有一个变量如下。
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=
:
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 个分箱的均匀剪切集。结果是 factor
和 levels=
,对应于每个中断的范围。在 var
和 breaks=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]"