下午好!
目前,我正在使用一个大型数据库,该数据库包含借款人如何支付贷款的各种信息
示例如下:
Loan_ID <- c(1, 1, 1, 2, 2, 2)
Execution_Sum <- c(1000, 900, 800, 500, 600, 400)
Execution_Date <- c("2022-03-10", "2022-03-15", "2022-03-17", "2022-03-11", "2022-03-22", "2022-03-29")
df <- data.frame(Loan_ID, Execution_Sum, Execution_Date)
df$Execution_Date <- as.Date(df$Execution_Date)
我有三列:唯一的贷款ID、Execution_Sum(借款人支付的金额)和Execution_Date(实际付款时间)。
问题是,我想创建我的数据帧的一个子集,为每个唯一的贷款(每个唯一的ID)只获得一行,这样这一行就不会反映借款人的所有付款,而是只反映最接近预定日期的一行(在我的情况下是2022年3月31日)
因此,期望的结果应该是:
1800,";2022-03-17";和2400,";2022-03-29";
因为这两个日期最接近2022年3月31日
有可能创建这种子集吗?
非常感谢您提供的任何帮助!
我们可以在行(which.min
)上slice
,该行给出了abs
解决方案min
,在通过"Loan_ID"分组后,"Execution_Date"和预定日期之间的最小差值
library(dplyr)
df %>%
group_by(Loan_ID) %>%
slice(which.min(abs(Execution_Date - as.Date("2022-03-31")))) %>%
ungroup
-输出
# A tibble: 2 × 3
Loan_ID Execution_Sum Execution_Date
<dbl> <dbl> <date>
1 1 800 2022-03-17
2 2 400 2022-03-29