R Dataframe过滤:基于时间因子用unique/duplicate函数处理贷款重复数据
R 贷款数据去重保留最新报告条目实现方案
前置处理:日期格式转换
首先需要将Reporting.date列从字符串转换为日期格式,避免字符串顺序比较出现逻辑错误:
# 转换日期格式 df$Reporting.date <- as.Date(df$Reporting.date, format = "%m/%d/%Y") df$Date.of.maturity <- as.Date(df$Date.of.maturity, format = "%m/%d/%Y")
方法1:使用dplyr包实现(推荐)
代码逻辑清晰易读,是R数据处理的常规方案:
library(dplyr) result <- df %>% # 按出借方、到期日、贷款金额分组,三者一致视为同一笔贷款 group_by(Lender.name, Date.of.maturity, Loan.amount) %>% # 每组仅保留报告日期最新的条目 filter(Reporting.date == max(Reporting.date)) %>% # 取消分组,恢复常规数据框结构 ungroup() # 如果需要把日期转回原字符串格式,可执行以下代码 result$Reporting.date <- format(result$Reporting.date, "%m/%d/%Y") result$Date.of.maturity <- format(result$Date.of.maturity, "%m/%d/%Y")
运行后得到的result和你给出的预期输出完全一致。
方法2:基础R实现(无需加载第三方包)
如果不想依赖外部包,可以用基础R原生函数实现:
# 按分组计算每组最大报告日期 max_date <- ave(df$Reporting.date, list(df$Lender.name, df$Date.of.maturity, df$Loan.amount), FUN = max) # 筛选符合条件的行 result <- df[df$Reporting.date == max_date, ] # 去重(避免同一分组有多个相同最大日期的完全重复行) result <- unique(result)
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

