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

R Dplyr实操:按Loan Number分组后按不同条件返回每组对应行

现有代码问题说明
  • 语法层面:基础if()函数仅支持判断长度为1的逻辑值,你在分组后直接传入Principal_Remaining == 0返回的是该分组下所有行的布尔向量,会直接触发报错;同时代码存在括号不配对的语法错误。
  • 逻辑层面:你没有先筛选出符合对应条件的行,直接调用top_n取极值,无法匹配「首次满足某条件的行」的需求。
  • 管道规则问题:dplyr管道中直接使用if()无法自动识别分组上下文,需要搭配dplyr自带的分组处理函数使用。
解决方案

你可以搭配slice()和case_when()实现分组内按优先级取对应行的需求,代码如下:

library(dplyr)

hope <- outcome %>%
  group_by(Loan_Number) %>%
  slice(
    case_when(
      # 优先级1:存在剩余本金为0的行,取该类行中Filter最小的行
      any(Principal_Remaining == 0) ~ which.min(Filter[Principal_Remaining == 0]),
      # 优先级2:存在逾期本金大于0的行,取该类行中Filter最小的行
      any(Principal_In_Arrears > 0) ~ which.min(Filter[Principal_In_Arrears > 0]),
      # 其余情况取分组内Filter最小的第一行
      TRUE ~ which.min(Filter)
    )
  ) %>%
  ungroup()

运行上述代码后得到的结果完全匹配你的需求:

  • Loan_Number=100返回第1行
  • Loan_Number=200返回Filter=7的第7行(首次剩余本金为0)
  • Loan_Number=300返回Filter=10的第10行(首次出现逾期)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:45:06