为两个不同变量的R范围创建bin间隔

为两个不同变量的R范围创建bin间隔,r,R,我想同时为产品类别创建两个bin间隔,一个用于“销售”,另一个用于“PCT更改”。“PCT变化”从-ve到+ve不等,销售额从2000美元到19000美元不等 下面是我的数据集 Product,Sales,PCT Change A,4769,0.72 A,9841,0.14 A,2594,-0.37 A,15970,-0.76 A,18142,0.9 A,19935,0.63 A,19023,0.63 A,4097,-0.31 A,17318,-0.38 A,15533,1.14 A,7596,

我想同时为产品类别创建两个bin间隔,一个用于“销售”,另一个用于“PCT更改”。“PCT变化”从-ve到+ve不等,销售额从2000美元到19000美元不等

下面是我的数据集

Product,Sales,PCT Change
A,4769,0.72
A,9841,0.14
A,2594,-0.37
A,15970,-0.76
A,18142,0.9
A,19935,0.63
A,19023,0.63
A,4097,-0.31
A,17318,-0.38
A,15533,1.14
A,7596,0.74
A,4099,0.06
B,7294,-0.45
B,5473,-0.81
B,5813,-0.31
B,4084,0.8
B,10446,0.08
B,3820,0.12
B,3208,0.02
B,10100,-0.82
B,19125,0.14
B,7332,0.9
C,1870,0.28
C,5949,-0.62
C,2739,0.98
C,14388,0
C,19307,1.08
C,12312,0.68
C,15120,0.08
C,16456,0.24
C,1063,0.64
C,3587,-0.07
C,15480,0.31
C,8934,0.79
C,10392,0.57
C,9705,0.87
C,18181,0.93
C,4700,-0.88
C,7392,-0.79
C,7504,-0.75
C,14943,1.06
下面是我正在尝试的代码

df %>%
group_by(Product) %>%
mutate(freq=cut(Sales, breaks=seq(0,8000,by=50), include.lowest=TRUE))
我不知道休息会有什么帮助。。我不想创建超过10个不同大小的垃圾箱。另外,不确定如何在同一代码中附加“PCT更改”,以引入两个不同的间隔

预期产出:

Product,Sales,PCT Change
    A,4769,0.72, [4000-5000],[0.65-0.78]
    A,9841,0.14 ,[9000-10000],[0.04-0.17]
    B,2594,-0.37,[2000-3000],[-0.39- -0.31]
另外,我正在寻找定制范围的选项,假设我想带4500-5000而不是4000-5000。我实际上正在运行一个模拟,因此希望探索可行的选项

任何线索都将不胜感激

谢谢, J

具有数据表的潜在解决方案

不完全确定是否要检查数据以找到合适的存储箱,或者是否只想筛选数据。这个解决方案解决了前者——如果这不是您想要的,那么编辑您的问题,我将更新我的解决方案

library(data.table)


DT[, sales.bins := paste0(round(floor(Sales), -3)-1000, "-", round(ceiling(Sales),-3)+1000)]
DT[, PCT.change.bins := paste0(floor(`PCT Change`)-1, "-", ceiling(`PCT Change`))]
这将产生以下输出:

查找具有以下内容的唯一存储箱:


扩展您在问题中使用的方法:

sales_bin_size = 1000    

df %>%
    group_by(Product) %>%
    mutate(Sales_bin=cut(Sales, breaks=seq(0,round(max(Sales), -3),by=sales_bin_size), include.lowest=TRUE),
           PCT_change_bin=cut(`PCT Change`,breaks = 10, include.lowest=TRUE))

您可以使用
sales\u bin\u size
来获得所需的bin大小。通过以类似的方法添加新变量,可以对
PCT\u change\u bin
执行相同的操作

现在还不清楚你期望输出是什么样子。如果你能发布一个你期望的结果的例子,那会有帮助的。嗨,我已经提供了期望的输出。
> unique(DT$sales.bins)
 [1] "4000-6000"   "9000-11000"  "2000-4000"   "15000-17000" "17000-19000" "19000-21000" "18000-20000" "3000-5000"   "16000-18000"
[10] "7000-9000"   "6000-8000"   "5000-7000"   "1000-3000"   "13000-15000" "11000-13000" "14000-16000" "0-2000"      "8000-10000" 

> unique(DT$PCT.change.bins)
[1] "-1-1" "-2-0" "0-2"  "-1-0"
sales_bin_size = 1000    

df %>%
    group_by(Product) %>%
    mutate(Sales_bin=cut(Sales, breaks=seq(0,round(max(Sales), -3),by=sales_bin_size), include.lowest=TRUE),
           PCT_change_bin=cut(`PCT Change`,breaks = 10, include.lowest=TRUE))