如何计算R中的累计信用余额

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

在我公司,我们以赊账方式向客户提供产品,必须在产品保修期满之前付清。在购买时,我们会记录客户 ID、产品类别、购买日期、信用额度和产品的保修到期日期。客户可以在还款期内任意分期还款。当客户还款时,我们会记录他们的身份、还款金额和还款日期。

下面的代码生成 2 个模拟我正在使用的数据集的虚拟数据帧:

# Set the seed for reproducibility
set.seed(123)

# Define the number of rows for each dataframe
n_purchase <- 20
n_repayment <- 20

# Define the possible values for each column
clientID <- 101:110
product_category <- LETTERS[1:3]
purchase_date <- seq(as.Date("2020-01-01"), as.Date("2020-12-31"), by = "day")
credit_amount <- seq(1000, 2000, by = 100)
warranty_expiration_date <- purchase_date + years(1) + days(14)
repayment_amount <- seq(500, 1000, by = 50)
repayment_date <- purchase_date

# Generate the purchase_df dataframe
purchase_df <- tibble(
  clientID = sample(clientID, n_purchase, replace = TRUE),
  product_category = sample(product_category, n_purchase, replace = TRUE),
  purchase_date = sample(purchase_date, n_purchase, replace = FALSE),
  credit_amount = sample(credit_amount, n_purchase, replace = TRUE),
  warranty_expiration_date = purchase_date + years(1) + days(14)
)
# Generate the repayment_df dataframe
repayment_df <- tibble(
  clientID = sample(clientID, n_repayment, replace = TRUE),
  repayment_amount = sample(repayment_amount, n_repayment, replace = TRUE),
  repayment_date = sample(repayment_date, n_repayment, replace = FALSE)
)

这是并发症;客户可以回来购买另一个产品,而之前的信用仍然有效,当他们还款时,我们不会记录他们支付的是哪种产品,我们只考虑他们的未偿还信用总额并减去刚刚偿还的金额。

经过多年的经营,我想知道哪些客户一直在定期还款,哪些客户存在不还款风险。

我现在的挑战是,对于购买数据框中的每条记录,添加一个列来保存该日期的信用余额。 这是我正在尝试的方法:

purchase_df %<>% full_join(repayment_df, by = "ClientID") %>% 
  filter(RepaymentDate %within% interval(purchaseDate, WarrantExpirationDate)) %>% 
  group_by(across(all_of(colnames(purchase_df)))) %>% 
  summarize(RepaidAmount = sum(RepaidAmount)/n()) %>% ungroup() 

这会给我一个包含已支付金额的新列。如果客户还款5次拿了3个产品,那我就把还款的金额加起来分给所有的产品(除以3)

我的问题是这些不同的产品有不同的保修期。因此,很难知道如何计算余额。我们的业务假设是还款总是先从最旧的未还款产品中减去。

任何可以帮助我实现这一目标的代码帮助?

dplyr tidyverse sqldf
© www.soinside.com 2019 - 2024. All rights reserved.