下午好!
目前我正在使用一个大型数据库,其中包含有关借款人如何支付贷款的各种信息
示例如下:
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)
我有 3 列:唯一的贷款 ID、Execution_Sum(借款人支付的金额)和 Execution_Date(实际付款的时间)。
问题是我想创建数据框的一个子集,以便为每笔唯一贷款(每个唯一 ID)仅获取 1 行,使得该行不反射(reflect)借款人支付的所有付款,但是只有 1 个最接近预定日期(在我的例子中是 2022 年 3 月 31 日)
所以,期望的结果应该是:
1, 800, "2022-03-17" 和 2, 400, "2022-03-29"
因为这两个日期最接近2022年3月31日
是否可以创建这种子集?
非常感谢您提供的任何帮助!
最佳答案
我们可以在行 (which.min
) 上进行切片
,这会给出 abs
olute min
imum 差异在“Execution_Date”和按“Loan_ID”分组后的预定日期之间
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
关于r - 通过 R 中的唯一 ID 和最接近日期对数据框进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72763878/