我有以下数据集,我想为每个组创建频率范围。
我可以创建相同的内容,但无法自定义每个组的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))
任何线索都会受到高度赞赏。
谢谢, Ĵ
答案 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]