Проблема в R.
Проблема: Это часть пакетов rfm.Я пытаюсь изменить внутреннюю функцию.Но я сталкиваюсь с проблемой в работе бункеров.Можете ли вы дать мне решение или объяснение?Я также пытаюсь установить binr, но не работает.
Сводка: данные находятся в пакете rfm.Он имеет 3 функции (customer_id, order_date, выручка).
rfm_revision <- function (data = NULL, customer_id = NULL, order_date = NULL,
revenue = NULL, analysis_date = NULL, recency_bins = 5,
frequency_bins = 5, monetary_bins = 5, ...)
{
cust_id <- enquo(customer_id)
odate <- enquo(order_date)
revenues <- enquo(revenue)
result <- data %>% select(!!cust_id, !!odate, !!revenues) %>%
group_by(!!cust_id) %>% summarise(date_most_recent = max(!!odate),
amount = sum(!!revenues), transaction_count = n()) %>%
mutate(recency_days = (analysis_date - date_most_recent)/lubridate::ddays()) %>%
select(!!cust_id, date_most_recent, recency_days, transaction_count,
amount) %>% set_names(c("customer_id", "date_most_recent",
"recency_days", "transaction_count", "amount"))
result$recency_score <- NA
result$frequency_score <- NA
result$monetary_score <- NA
rscore <- recency_bins %>% seq_len() %>% rev()
if (length(recency_bins) == 1) {
bins_recency <- bins(result, recency_days, recency_bins)
}
else {
bins_recency <- recency_bins
}
lower_recency <- bins_lower(result, recency_days, bins_recency)
upper_recency <- bins_upper(result, recency_days, bins_recency)
for (i in seq_len(recency_bins)) {
result$recency_score[result$recency_days >= lower_recency[i] &
result$recency_days < upper_recency[i]] <- rscore[i]
}
fscore <- frequency_bins %>% seq_len() %>% rev()
if (length(frequency_bins) == 1) {
bins_frequency <- bins(result, transaction_count, frequency_bins)
}
else {
bins_frequency <- frequency_bins
}
lower_frequency <- bins_lower(result, transaction_count,
bins_frequency)
upper_frequency <- bins_upper(result, transaction_count,
bins_frequency)
for (i in seq_len(frequency_bins)) {
result$frequency_score[result$transaction_count >= lower_frequency[i] &
result$transaction_count < upper_frequency[i]] <- i
}
mscore <- monetary_bins %>% seq_len() %>% rev()
if (length(monetary_bins) == 1) {
bins_monetary <- bins(result, amount, monetary_bins)
}
else {
bins_monetary <- monetary_bins
}
lower_monetary <- bins_lower(result, amount, bins_monetary)
upper_monetary <- bins_upper(result, amount, bins_monetary)
for (i in seq_len(monetary_bins)) {
result$monetary_score[result$amount >= lower_monetary[i] &
result$amount < upper_monetary[i]] <- i
}
result %<>% mutate(rfm_score = recency_score * 100 + frequency_score *
10 + monetary_score) %>% select(customer_id, date_most_recent,
recency_days, transaction_count, amount, recency_score,
frequency_score, monetary_score, rfm_score)
result$transaction_count <- as.numeric(result$transaction_count)
out <- list(rfm = result, analysis_date = analysis_date,
frequency_bins = frequency_bins, recency_bins = recency_bins,
monetary_bins = monetary_bins)
class(out) <- c("rfm_table_order", "tibble", "data.frame")
return(out)
}
analysis_date <- lubridate::as_date('2006-12-31', tz = 'UTC')
rfm_result <- rfm_revision(rfm_data_orders, customer_id, order_date, revenue, analysis_date)
#Error in bins(result, recency_days, recency_bins) :
# could not find function "bins"