找出占总支出前 90% 的支出者

Find out spender's that contributed to top 90% of total Spent

我在 R 中有一个包含 2 列的数据框 - 名称和花费的金额。我想找出占总支出前 90% 的支出者列表。

我的数据框的简短示例(实际上它有数千行)-

DF <- data.frame(Names = letters[1:13], 
     Total_Spent = c(129777.73,1265.27,124906.61,12493.39,130.68,121709.55,12476.43,                                                        120235.74,120053.71,119582.76,113732.94,112417.77,1000.71))

我的问题来自于需要过滤掉数据中的大量噪音并去除不构成太多的消费者。 90% 只是一个假设数字,我想进行试验并查看要删除的正确支出者数量。例如,如果我看到 80% 的消费者只花费了总花费金额的 10%,我会很乐意只拿剩下的 20% 进行分析。

任何有关如何解决此问题的帮助或想法将不胜感激。

一种方法是按降序排列数据,select 行,直到达到 90%。

perc <- 0.9
DF <- DF[order(DF$Total_Spent, decreasing = TRUE),]
DF1 <- DF[cumsum(DF$Total_Spent) <= sum(DF$Total_Spent) * perc, ]
DF1

#   Names Total_Spent
#1      a    129777.7
#3      c    124906.6
#6      f    121709.6
#8      h    120235.7
#9      i    120053.7
#10     j    119582.8
#11     k    113732.9

您可以根据自己的选择更改 perc 值。

这样的东西行得通吗?

DF <- data.frame(Names = letters[1:13], Total_Spent = c(129777.73,1265.27,124906.61,12493.39,130.68,121709.55,12476.43, 120235.74,120053.71,119582.76,113732.94,112417.77,1000.71))

x<-quantile(DF[,2], 0.9)

DF_90<-which(DF[,2]>=x)
DF[,1][DF_90]

结果:

[1] a c