为 R 中的连续数据指定 bin 范围值

Specifying bin range values for continuous data in R

我有一组交易值,范围是 0-15000 美元。我绘制了一个直方图,指定 $250 bin 值的间隔,这很有用。我想做的是返回数据框并在数据框中创建我自己的 bin 值。箱子将指定交易所属的范围,例如:0-250、251-499、500-749、750...乘以 250 一直到 15,000。

我看了这个关于 'cut' 和 'findInterval' 的漂亮 post Generate bins from a data frame,但它们并没有真正达到我的期望。对于低 bin 范围来说,这要么是令人讨厌的因素,但一旦我超过 $x,000,我就会得到 e-values (1.27e+04, 1.3e04)。

我想要的是:

Tran ID   Amount     Bin
135       9.22    0-250
138      ,022.01   1000-1249
155      ,350.11  10,249-10,500

这可以用 'cut''findInterval' 实现吗?

cut 是解决这个问题的方法。如果您不喜欢带括号的输出,您可以使用一些数据操作使其看起来像您想要的那样。

bins <- seq(0, 15000, by=250)
Amount2 <- as.numeric(gsub("\$|,", "", df$Amount))
labels <- gsub("(?<!^)(\d{3})$", ",\1", bins, perl=T)
rangelabels <- paste(head(labels,-1), tail(labels,-1), sep="-")
df$Bin <- cut(Amount2, bins, rangelabels)

我们首先创建一个从 0 到 15,000 乘以 250 的序列。接下来我们通过消除美元符号和逗号来格式化 Amount 列并保存到变量 Amount2。然后我们通过在前三位数字后插入逗号来格式化输出标签。我们将在最后的 Bin 列中使用该变量。

变量 rangelabels 将 bin 断点与连字符组合在一起。接下来是主要功能,cut(Amount2, bins, rangelabels)。第一个参数 Amount2 是被切割的数据帧向量。第二个参数 bins 提供间隔的中断。最后一个参数 rangelabels 是输出结果的名称向量:

df
  TranID     Amount           Bin
1    135    9.22         0-250
2    138  ,022.01   1,000-1,250
3    155 ,350.11 10,250-10,500