我正在为联络中心创建人员模型。我想将erlang c应用于预测数据的新列(通过RODBC con引入预测)
应用我的erlang c公式时,我会收到多个警告,大多数情况下都是重复这些警告。该公式可以运行,但是只有第一行是正确的。
警告消息:
1:在1:agents中:数值表达式包含96个元素:仅第一个使用
2:在while(gos
1)/ 100){: 条件的长度> 1,并且只会使用第一个元素 3:在1:agents中:数值表达式包含96个元素:仅第一个使用
4:在一会儿(gos
1)/ 100){: 条件的长度> 1,并且只会使用第一个元素
问题是我需要一些输入来使函数从数据框中提取
我需要该函数从数据帧中的当前行获取呼叫量和AHT并计算出人数要求
数据是一个基本表,由日期,日,月AHT和“呼叫”列组成
我尝试了多种应用方法:
我用过Lapply
我尝试通过创建新列来添加它
我尝试使用rep函数
我尝试过使用for循环
Interval <- 15
Calls <- Should pull from Data
Duration <- Should pull from Data
Wait_time <- 20
gos_target <- 90
Shrinkage <- 21
Rate <- Calls *(60/Interval)
intensity <- function(rate, duration, interval = 60) {
(rate / (60 * interval)) * duration
}
erlang_c <- function(agents, rate, duration, interval = 60) {
int <- intensity(rate, duration, interval)
erlang_b_inv <- 1
for (i in 1:agents) {
erlang_b_inv <- 1 + erlang_b_inv * i / int
}
erlang_b <- 1 / erlang_b_inv
agents * erlang_b / (agents - int * (1 - erlang_b))
}
service_level <- function(agents, rate, duration, target, interval = 60) {
pw <- erlang_c(agents, rate, duration, interval)
int <- intensity(rate, duration, interval)
1 - (pw * exp(-(agents - int) * (target / duration)))
}
resource <- function(rate, duration, target, gos_target, interval = 60) {
agents <-round(intensity(rate, duration, interval) + 1)
gos <- service_level(agents, rate, duration, target, interval)
while (gos < gos_target * (gos_target > 1) / 100) {
agents <- agents + 1
gos <- service_level(agents, rate, duration, target, interval)
}
return(c(ceiling(agents/(1-(Shrinkage/100)))))
}
resource(Calls, Duration, Wait_time, gos_target, 15)
#
我需要每一列来给我准确的人数。当我为一行数据,任何一行运行它时,答案总是准确的。一旦我获得多于一行的数据,我的员工人数结果就会由5到15个座席来计算,但总是不准确
答案 0 :(得分:1)
如果我理解正确,则Calls
和Duration
参数可能是向量,而其他参数是模型的参数。一种简单的解决方案是vectorize函数本身:
vresource <- Vectorize(resource)
Vectorize的工作是将一个函数转换为既可以接受向量又可以接受常数v值的函数,然后跨向量并行应用。这将在以下数据帧中产生以下结果:
R> df <- data.frame(Calls=c(1,5,3,7), Duration=c(30,50,45,10))
R> with(df, vresource(Calls, Duration, Wait_time, gos_target, 15))
[1] 2 3 3 2
然后可以通过将其分配给新列(例如df$resource <- with(df, vresource(Calls, Duration, Wait_time, gos_target, 15))
)来轻松地将其添加到数据框中。