R语言如何基于动态起始日期自动计算指定债务还款列的数值总和
R语言实现动态违约日期后还款总额计算
核心思路:将宽格式的还款数据转为长格式,提取每列对应的还款周期起始日期,和用户的违约日期匹配后筛选符合条件的记录求和,适配任意数量的还款列场景。
完整可运行代码
# 加载依赖包 library(dplyr) library(tidyr) library(lubridate) library(stringr) # 测试数据生成 Borrower_ID <- c(1,2,3,4,5) Default_Date <- c("2020-01-06", "2020-02-17", "2020-03-20", "2020-04-21", "2020-05-21") Debt_Repayment_2020.01.01_2020.01.31 <- c(10,20,30,40,50) Debt_Repayment_2020.02.01_2020.02.28 <- c(20,30,40,50,60) Debt_Repayment_2020.03.01_2020.03.31 <- c(30,40,50,60,70) Debt_Repayment_2020.04.01_2020.04.30 <- c(40,50,60,70,80) Debt_Repayment_2020.05.01_2020.05.31 <- c(50,60,70,80,90) table_test <- data.frame(Borrower_ID, Default_Date, Debt_Repayment_2020.01.01_2020.01.31, Debt_Repayment_2020.02.01_2020.02.28, Debt_Repayment_2020.03.01_2020.03.31, Debt_Repayment_2020.04.01_2020.04.30, Debt_Repayment_2020.05.01_2020.05.31) # 核心计算逻辑 result <- table_test %>% # 转换违约日期为日期格式 mutate(Default_Date = ymd(Default_Date)) %>% # 宽表转长表,将所有还款列转为行存储 pivot_longer(cols = starts_with("Debt_Repayment_"), names_to = "repayment_period", values_to = "repayment_amount") %>% # 提取还款周期起始日期,转换为统一日期格式 mutate(period_start = str_extract(repayment_period, "(?<=Debt_Repayment_)\\d{4}\\.\\d{2}\\.\\d{2}") %>% gsub("\\.", "-", .) %>% ymd()) %>% # 筛选违约日期之后的还款记录 filter(period_start > Default_Date) %>% # 按用户分组计算总还款额 group_by(Borrower_ID, Default_Date) %>% summarise(total_repayment_after_default = sum(repayment_amount), .groups = "drop") %>% # 结果合并回原始表,保留所有原始字段 left_join(table_test, ., by = c("Borrower_ID", "Default_Date")) # 输出结果 print(result$total_repayment_after_default)
结果验证
运行后输出的总还款额依次为140、180、150、90、0,和手动计算结果完全匹配:
- 借款人1违约日期为2020-01-06,求和2-5月还款:20+30+40+50=140
- 借款人5违约日期为2020-05-21,没有晚于该日期的还款周期,结果为0
内容的提问来源于stack exchange,提问作者lenpyspanacb
相关产品推荐
相关产品推荐

