R 将数据分隔为4个相等百分比的数据块
我需要根据百分比将数据分成4个相等的数据块,并根据R 将数据分隔为4个相等百分比的数据块,r,python-3.x,data.table,R,Python 3.x,Data.table,我需要根据百分比将数据分成4个相等的数据块,并根据Qty\u ordered按降序排列。我尝试在R中使用'bins.quantiles'函数(来自binr包),但不起作用。还有其他可以使用的方法吗 Input SL.No Item Qty_Ordered 1 VT25 2 2 VT58 4 3 VT40 10 4 VT58 2 5 VT 69 1
Qty\u ordered
按降序排列。我尝试在R中使用'bins.quantiles'
函数(来自binr包),但不起作用。还有其他可以使用的方法吗
Input
SL.No Item Qty_Ordered
1 VT25 2
2 VT58 4
3 VT40 10
4 VT58 2
5 VT 69 12
6 VT 67 6
7 VT45 21
8 VT 25 16
9 VT 40 24
10 VT98 10
11 VT78 18
12 VT40 6
13 VT 25 26
14 VT85 6
15 VT78 10
16 VT25 4
17 VT40 15
18 VT69 24
Output
SL.No Item Qty Ordered Class
1 VT25 2 1
4 VT58 2 1
2 VT58 4 1
16 VT25 4 1
6 VT 67 6 2
12 VT40 6 2
14 VT85 6 2
3 VT40 10 2
10 VT98 10 2
15 VT78 10 3
5 VT 69 12 3
17 VT40 15 3
8 VT 25 16 3
11 VT78 18 3
7 VT45 21 4
9 VT 40 24 4
18 VT69 24 4
13 VT 25 26 4
也许是这个
library(data.table)
test <- fread(input = "SL.No Item Qty_Ordered
1 VT25 2
2 VT58 4
3 VT40 10
4 VT58 2
5 VT69 12
6 VT67 6
7 VT45 21
8 VT25 16
9 VT40 24
10 VT98 10
11 VT78 18
12 VT40 6
13 VT25 26
14 VT85 6
15 VT78 10
16 VT25 4
17 VT40 15
18 VT69 24", header = T)
setorder(test, Qty_Ordered)
test[, Class := .I %/% ((.N+1)/4) + 1]
test
# SL.No Item Qty_Ordered Class
# 1: 1 VT25 2 1
# 2: 4 VT58 2 1
# 3: 2 VT58 4 1
# 4: 16 VT25 4 1
# 5: 6 VT67 6 2
# 6: 12 VT40 6 2
# 7: 14 VT85 6 2
# 8: 3 VT40 10 2
# 9: 10 VT98 10 2
# 10: 15 VT78 10 3
# 11: 5 VT69 12 3
# 12: 17 VT40 15 3
# 13: 8 VT25 16 3
# 14: 11 VT78 18 3
# 15: 7 VT45 21 4
# 16: 9 VT40 24 4
# 17: 18 VT69 24 4
# 18: 13 VT25 26 4
库(data.table)
测试这里有一种使用tidyverse的方法
library(tidyverse)
df <- read.table(text = "SL.No Item Qty_Ordered
1 VT25 2
2 VT58 4
3 VT40 10
4 VT58 2
5 VT69 12
6 VT67 6
7 VT45 21
8 VT25 16
9 VT40 24
10 VT98 10
11 VT78 18
12 VT40 6
13 VT25 26
14 VT85 6
15 VT78 10
16 VT25 4
17 VT40 15
18 VT69 24",header = T)
df %>%
mutate(Class = findInterval(x = Qty_Ordered, vec = quantile(Qty_Ordered),rightmost.closed = T)) %>%
arrange(Class)
库(tidyverse)
df%
mutate(Class=findInterval(x=Qty\u Ordered,vec=quantile(Qty\u Ordered),最右边的.closed=T))%>%
安排(班级)
使用cut
或findInterval
创建组显示如果类1中有5个块,但类4中只有3个块,那么块是否相等?如果有18个条目,您希望如何使块相等?@guscht,订单数量降序的前25%进入类别1,下25%进入类别2,因此您可能希望看到?setorder
,?fread
,?.N
和?.I
,了解一些备选方案。嗨,Frank,谢谢您的建议。我调整了答案。如果您有进一步的建议,请不要犹豫。:)@guscht,我们能用smbining.factor来计算same@pankaj,我不知道该函数,?smbinning
不会返回任何结果。是哪个包裹寄来的?我总是尽量少用软件包……我想在这种情况下,我只会使用data.table,而不会引入额外的软件包。@guscht,它来自库(smbinning)。我们是否也可以将smbining.factor包用于same@pankajsmbinning软件包要求您拥有一个二进制(0,1)变量,该变量与要存储的变量相关联。您发布的数据集没有二进制(0,1)变量,如何在此数据集上应用smbinning.factor: