gpt4 book ai didi

r - 将行分成 10 组,每组具有相同的值

转载 作者:行者123 更新时间:2023-12-04 11:56:48 27 4
gpt4 key购买 nike

我有一个包含 2 列、ID 和收入的数据。我想创建一列,将数据分成 10 组,每组占总收入的 10%。分位数方法给了我 10 个 ID 数量相同的组,而不是收入。

idrev[ , decile := cut(Revenue,
breaks = quantile(Revenue, probs = seq(0, 1, by = 1/10)),
labels = 1:10, right = FALSE)]

我得到以下类型的结果
    N   Revenue %Revenue
100 $3,992 80%
100 $518 10%
100 $236 5%
100 $126 3%
100 $68 1%
100 $35 1%
100 $16 0%
100 $6 0%
100 $2 0%
100 $1 0%
1,000 $5,000 100%

当我在寻找这个结果时
    N   Revenue %Revenue
798 500 10%
104 500 10%
47 500 10%
25 500 10%
14 500 10%
7 500 10%
3 500 10%
2 500 10%
1 500 10%
1 500 10%
1,000 $5,000 100%

请在 R 中为此提出一个解决方案。

添加代码以获取示例数据和统计信息
library(Hmisc);library(data.table)
set.seed(123)
idrev<-data.table(ID=1:1000, Revenue=sample(100,1000,replace=T))
idrev[,.(.N,sum(Revenue))] #Check total revenue
idrev[ , decile := cut2(Revenue,g=10)]
idrev[,.(.N,sum(Revenue)),by=decile][order(decile)]

最佳答案

这是一个 data.table应该让你到达那里的唯一方法:

idrev[order(Revenue), revDec := 10 * ceiling(10 * (cumsum(Revenue) / sum(Revenue)))]

这是按收入对行进行排序后的十分位数的直接计算。

以下是通过 revDec 对收入求和的结果:
idrev[, .(Revenue=sum(Revenue)), by="revDec"]
revDec Revenue
1: 10 5004
2: 70 5070
3: 20 5039
4: 80 5025
5: 90 4974
6: 30 4974
7: 40 5059
8: 50 5026
9: 100 5091
10: 60 4960

他们都非常接近5000。

关于r - 将行分成 10 组,每组具有相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39143885/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com