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

时间:2015-10-06 17:16:37

标签: r grouping

我有一组交易值,范围是0-15000美元。我绘制了一个直方图,指定了250美元箱值的中断,这很有帮助。我想做的是回到数据框并在数据框中创建自己的bin值。这些垃圾箱将指定交易所涉及的范围,例如:0-250,251-499,500-749,750 ......乘以250到15,000。

我看了一下这篇关于'cut'和'findInterval'的好文Generate bins from a data frame,但它们并没有达到我的期望。这是令人讨厌的因素,看起来对于低位区域来说是好的,但是一旦我超过$ x,我就会获得e值(1.27e + 04,1.3e04)。

我想要的是:

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

这可以通过'cut''findInterval'实现,还是有更好的实施方式?

1 个答案:

答案 0 :(得分:1)

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    $249.22         0-250
2    138  $1,022.01   1,000-1,250
3    155 $10,350.11 10,250-10,500