我有一个数据框(priceata),其中包含客户的交易数据。我按TNP从最高到最低为每个客户安排()数据框。我想从最高的TNP向下移动,累积TNP,直到整个列达到总TNP的60%,并为所有这些客户提供一个类别=“ A”。然后继续沿色谱柱向下移动,并为后续客户提供占色谱柱总TNP的60%至90%的客户=“ B”类,然后为其余客户提供“ C”类。
这是数据:
TNP Class
11847.47 C
11845.76 C
11840.06 C
11814.44 C
11775.24 C
11766.90 C
这是我为实现我的目标而构建的功能:
FUN.sthp.1 <- function(TNP) {
#The dataframe must be ordered by TNP for this cumsum function to work
Acut<-(.6*sum(pricedata$TNP))
Bcut<-(.9*sum(pricedata$TNP))
Ccut<-(1*sum(pricedata$TNP))
Summary.DF<- pricedata[pricedata$TNP>=TNP,]
total<-sum(Summary.DF$TNP)
Class<-ifelse(total<=Acut, "A",
ifelse(total<=Bcut & total>Acut, "B",
"C"))
return(Class)
}
然后,我使用mapply()调用此函数并输入TNP。
在没有所有键入的情况下,是否存在可以实现相同功能的功能或功能?
您可以cumsum
用来获取累计和。将其除以总数sum
。然后,您可以使用分配级别cut
。有一些选项可以处理边距(发生在60%的情况等),您可以使用以下方式查看帮助文件:?cut
"TNP Class
11847.47 C
11845.76 C
11840.06 C
11814.44 C
11775.24 C
11766.90 C" -> myDat
out <- read.table(text = myDat, stringsAsFactors = FALSE, header = TRUE)
cut(cumsum(out$TNP)/sum(out$TNP), breaks =c(0,60,90,100)/100, labels = LETTERS[1:3])
[1] A A A B B C
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句