r - 通过 R 中的唯一 ID 和最接近日期对数据框进行子集化

标签 r dataframe data-manipulation data-filtering

下午好!

目前我正在使用一个大型数据库,其中包含有关借款人如何支付贷款的各种信息

示例如下:

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) 上进行切片,这会给出 absolute minimum 差异在“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/

相关文章:

r - 在 windows 中使用 C++ dll 创建 r 包并确保可移植到 linux

r - 如何将空格分隔的字符串转换为r中的数据框

r - 给定行中大于 0 的列值数?

r - 在 R 中创建/填充空数据框

machine-learning - 查找连续目标变量的 'Best' 截止点的方法

r - 加载多个包含逗号或句点作为小数点的 `csv` 文件

r - 当多个变量的条件相同时简化 case_when()

r - 使用 R/tidyverse 中的 pivot_wider() 将所有列旋转得更宽(ID 列除外)

r - 如何在R中将一列拆分为两列

python - 使用值列从 GPS 数据创建插值多边形