我有一组交易值,范围是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'
实现,还是有更好的实施方式?
答案 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