【问题标题】:Specifying bin range values for continuous data in R在 R 中为连续数据指定 bin 范围值
【发布时间】:2016-01-03 17:09:53
【问题描述】:

我有一组交易价值,范围为 0-15000 美元。我绘制了一个直方图,指定了 250 美元的 bin 值的中断,这很有帮助。我想做的是回到数据框中并在数据框中创建我自己的 bin 值。这些 bin 会指定交易落入的范围,例如:0-250、251-499、500-749、750...由 250 一直到 15,000。

我看了这篇关于“cut”和“findInterval”的漂亮帖子Generate bins from a data frame,但它们并没有真正达到我的期望。对于低 bin 范围来说,这要么是看起来不错的讨厌因素,但一旦我超过 $x,000,我就会得到 e-values (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' 可以实现这一点,还是有更好的实现方式?

【问题讨论】:

    标签: r grouping


    【解决方案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 x 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
    

    【讨论】:

    • 字符串操作是将 bin 值指定为独立向量的方法!独立地,我能够使用 {df.tn.amount$cuts
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多