R-最大和最小逻辑中的Bin范围,用于每组的频率范围

时间:2018-05-10 18:25:19

标签: r

我有以下数据集,我想为每个组创建频率范围。

我可以创建相同的内容,但无法自定义每个组的bin大小。

以下是我的数据的样子。

Date, Group, Sales
Jan-17, A , 1000
Feb-17, A , 1200
Mar-17, A , 700
Apr-17, A , 2000
May-17, A , 1800
Jan-17, B , 5000
Feb-17, B , 5800
Mar-17, B , 6800
Apr-17, B , 7000
May-17, B , 6000

如你所见," A"群体在700到2000之间,而" B" group位于5000到7000之间。我当前的代码根据相同的bin大小分配所有组,但是我想根据每组的max-min除以5来定制bin大小,即。在这里,我想为每个组创建5个不同的垃圾箱。

因此对于A我想要为尺寸280 [(2000-700)/ 5 =>创建5个分档。 280],其中起始应为[700-980],[980-1260],[1260-1540]。 B组的类似方法。我想将该方法应用于max和min,如上所述,适用于所有组。

此外,如果我能以某种方式将Bin([700-980])映射到我现有的数据帧,那将会很棒。不确定这是否可行。

以下是我现有的标准箱尺寸范围的代码。

df %>%
group_by(Group) %>%
mutate(freq=cut(Sales, breaks=seq(0,8000,by=50), include.lowest=TRUE))

任何线索都会受到高度赞赏。

谢谢, Ĵ

1 个答案:

答案 0 :(得分:2)

您可以使用dplyr执行此操作,并在使用Group之前按cut进行分组...

library(dplyr)
df2 <- df %>% group_by(Group) %>% 
              mutate(bin=cut(Sales,
                             breaks=seq(min(Sales),max(Sales),length.out = 6),
                             include.lowest=TRUE,
                             dig.lab=50))

df2
   Date   Group Sales bin        
 1 Jan-17 A      1000 (960,1220] 
 2 Feb-17 A      1200 (960,1220] 
 3 Mar-17 A       700 [700,960]  
 4 Apr-17 A      2000 (1740,2000]
 5 May-17 A      1800 (1740,2000]
 6 Jan-17 B      5000 [5000,5400]
 7 Feb-17 B      5800 (5400,5800]
 8 Mar-17 B      6800 (6600,7000]
 9 Apr-17 B      7000 (6600,7000]
10 May-17 B      6000 (5800,6200]