You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R的data.frame中实现类似Excel MINIF的新变量生成逻辑

按贷款ID标记首次逾期行的R实现方案

需求说明:针对包含Portfolio.Date(观测日期)、Loan.Number(贷款ID)、Current.Delinquency.Code(逾期状态码)的数据框,生成Delinquent列——仅当某贷款ID首次出现状态码>3的行时标记为TRUE,其余行均为FALSE。

示例数据

首先构造示例数据(确保日期格式为Date类型):

df <- data.frame(
  Portfolio.Date = as.Date(c("2022/01/01", "2022/02/01", "2022/03/01", "2022/04/01",
                            "2022/01/01", "2022/02/01", "2022/03/01", "2022/04/01",
                            "2022/01/01", "2022/02/01", "2022/03/01", "2022/04/01")),
  Loan.Number = c(1,1,1,1,2,2,2,2,3,3,3,3),
  Current.Delinquency.Code = c(1,4,4,4,1,1,1,1,1,3,4,4)
)

方法一:使用tidyverse(dplyr)

这是数据处理中常用的tidy风格方案,逻辑清晰易读:

library(dplyr)

df <- df %>%
  group_by(Loan.Number) %>%
  mutate(
    # 判断当前贷款是否存在逾期记录
    has_delinquent = any(Current.Delinquency.Code > 3),
    # 提取首次逾期日期,无逾期则设为NA
    first_delinquent_date = if(has_delinquent) min(Portfolio.Date[Current.Delinquency.Code > 3]) else NA,
    # 标记是否为首次逾期行,将NA转为FALSE
    Delinquent = replace_na(Portfolio.Date == first_delinquent_date, FALSE)
  ) %>%
  ungroup() %>%
  # 移除临时生成的辅助列
  select(-has_delinquent, -first_delinquent_date)

方法二:使用Base R

无需额外安装包,适合依赖基础环境的场景:

# 按Loan.Number分组计算首次逾期日期
first_delinquent <- ave(df$Portfolio.Date, df$Loan.Number, 
                        FUN = function(x, code) {
                          overdue_idx <- code > 3
                          if(any(overdue_idx)) min(x[overdue_idx]) else NA
                        }, 
                        code = df$Current.Delinquency.Code)

# 生成Delinquent列并处理NA值
df$Delinquent <- df$Portfolio.Date == first_delinquent
df$Delinquent[is.na(df$Delinquent)] <- FALSE

最终结果

运行任意一种方法后,数据框会生成符合要求的Delinquent列,与示例预期一致:

Portfolio.Date Loan.Number Current.Delinquency.Code Delinquent
      2022-01-01           1                        1      FALSE
      2022-02-01           1                        4       TRUE
      2022-03-01           1                        4      FALSE
      2022-04-01           1                        4      FALSE
      2022-01-01           2                        1      FALSE
      2022-02-01           2                        1      FALSE
      2022-03-01           2                        1      FALSE
      2022-04-01           2                        1      FALSE
      2022-01-01           3                        1      FALSE
      2022-02-01           3                        3      FALSE
      2022-03-01           3                        4       TRUE
      2022-04-01           3                        4      FALSE

内容的提问来源于stack exchange,提问作者JotHa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:55:28