2015-10-06 78 views
0

我有一组交易值,范围是0-15000美元。我绘制了一个直方图,指定$ 250 bin值的间隔,这很有帮助。我想要做的是回到数据框中,并在数据框中创建我自己的bin值。箱子将指定交易落入的范围,例如:0-250,251-499,500-749,750 ... 250,一直到15,000。指定R中连续数据的分隔值范围

我看着这个漂亮的帖子Generate bins from a data frame关于'cut'和'findInterval',但他们并没有真正满足我的期望。这或者是令人讨厌的因素,对于低仓位区域看起来不错,但是一旦我获得高于$ x,000的价格,我就会得到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

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) 

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

变量rangelabels将箱子断点与连字符组合在一起。主要功能是,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 
+1

的字符串操作是去指定二进制数值作为一个独立的向量的方式!独立地,我能够使用{df.tn.amount $ cuts < - cut(df.tn.amount $ amount,seq(from = 0,to = 15000,by = 250) )} - 辉煌。另一个正则表达式胜利! – Zach