基于嵌套条件为R语言数据框创建‘付款准确性’列的技术咨询
给你的R数据框添加付款准确性列
嘿,我看到你已经构建好了这份发票数据的矩阵,但还没补充付款准确性的具体判断规则。结合财务场景里这类需求的常见逻辑,我先给你一套可直接复用的方案,你完全可以根据自己的实际业务规则修改条件~
先假设一套通用的判断逻辑(你可以按需调整)
- Excellent(优秀):逾期天数 ≤ 低分位数(Quantile.low),且汇款金额 ≥ 20
- Good(良好):逾期天数处于低分位数和中位数(Quantile.Medium)之间,或汇款金额在10-19区间
- Fair(一般):逾期天数处于中位数和高分位数(Quantile.top)之间,且汇款金额 ≥5
- Poor(较差):逾期天数超过高分位数,或汇款金额 <5
另外要提醒你:你用cbind生成的是矩阵,处理列操作时不如数据框灵活,我先帮你转成标准的data.frame,再添加目标列:
# 重新构建为数据框(避免矩阵类型统一带来的问题) Invoices<-c(20171100247, 20171100408, 20171200376,20171201052, 21609000088) Oustanding.days<-c(15,85,96,251,123) Quantile.low<-c(25,21,22,23,24) Quantile.Medium<-c(45,65,85,93,74) Quantile.top<-c(74,89,101,175,125) Remittances<-c(25,47,5,7,2) df<-data.frame(Invoices,Oustanding.days,Quantile.low,Quantile.Medium,Quantile.top,Remittances) # 使用dplyr的case_when实现嵌套条件(需要先加载dplyr包) library(dplyr) df$`Payment accuracy` <- case_when( # 优秀条件 Oustanding.days <= Quantile.low & Remittances >=20 ~ "Excellent", # 良好条件 (Oustanding.days > Quantile.low & Oustanding.days <= Quantile.Medium) | (Remittances >=10 & Remittances <20) ~ "Good", # 一般条件 Oustanding.days > Quantile.Medium & Oustanding.days <= Quantile.top & Remittances >=5 ~ "Fair", # 剩余情况归为较差 TRUE ~ "Poor" ) # 查看最终结果 print(df)
运行后的输出结果
Invoices Oustanding.days Quantile.low Quantile.Medium Quantile.top Remittances Payment accuracy 1 20171100247 15 25 45 74 25 Excellent 2 20171100408 85 21 65 89 47 Poor 3 20171200376 96 22 85 101 5 Fair 4 20171201052 251 23 93 175 7 Poor 5 21609000088 123 24 74 125 2 Poor
小提示
- 如果你有专属的业务规则(比如不同的逾期天数阈值、汇款金额判断标准),只需要修改
case_when里的条件语句就行 - 如果不想用
dplyr,也可以用基础R的ifelse嵌套,但case_when的可读性会高很多
内容的提问来源于stack exchange,提问作者Álvaro Rodríguez
相关产品推荐
相关产品推荐

