dplyr -- 使用自定义函数的不同结果

问题描述 投票:0回答:1

我试图找出为什么

exp_purch
变量的结果彼此不同。 这似乎有效。

library(dplyr)

data3 <- tibble(
  customer = c(1,2,3),
  frequency = c(30,32,36),
  recency = c(72,71,74),
  T = c(74,72,77),
  monetary_value = c(35.654,47.172187,30.603611)
)

a <- 0.6866195
b <- 2.959643
r <- 0.2352725
alpha <- 4.289764

log_div_mean <- function(customer,dt) {
  data <- dt
  log_div_ <- (r + data$frequency[customer]) * 
    log((alpha + data$T[customer]) / (alpha + data$recency[customer])) +
    log(a / (b + max(data$frequency[customer], 1) - 1))
  xd <- 1/(1+exp(-(-log_div_)))
  return(xd)
}

data3 %>% mutate(exp_purch = log_div_mean(customer,data3))

当我在外面做时

dplyr
,结果有所不同。

customer <- 2
log_div_ <- (r + data3$frequency[customer]) * 
  log((alpha + data3$T[customer]) / (alpha + data3$recency[customer])) +
  log(a / (b + max(data3$frequency[customer], 1) - 1))
xd <- 1/(1+exp(-(-log_div_)))
xd

看起来

dplyr
代码正在使用所有三行的最后一个客户 ID。

r function dplyr
1个回答
0
投票

这是一个简单的基本 R 实现,请参阅我的评论了解详细信息。

我将留给您制定一个与

{dplyr}
语法配合良好的版本。数据屏蔽不同。 “
dplyr
式”接近于
subset()
。 如果您需要帮助,请随时发表评论。

数据

data3 = data.frame(
  customer = c(1,2,3),
  frequency = c(30,32,36),
  recency = c(72,71,74),
  TX = c(74,72,77),
  monetary_value = c(35.654,47.172187,30.603611))

实施

of

log_div_mean()
(有计算参考吗?)

log_div_mean = \(.data, # data 
                 .x, .y, .z, # columns of interest
                 a = .6866195, b = 2.959643,  # default values 
                 r = .2352725, alpha = 4.289764 # which can be overwritten
                 ) {
  .u = .data[[.x]]
  r1 = r + .u  
  r2 = log( (alpha + .data[[.y]]) / (alpha + .data[[.z]]) )
  r3 = log(a / (b + max(c(.u, 1)) - 1)) # typo in your max?
  rr = r1 * r2 + r3
  1 / (1 + exp(rr))
}

我们使用

{tidyverse}.

中存在的变量命名例程

申请

> log_div_mean(.data = data3, .x = "frequency", .y = "TX", .z = "recency")
[1] 0.9619502 0.9730688 0.9340070

结果正确吗?

© www.soinside.com 2019 - 2024. All rights reserved.