Предполагая, что ваши ссуды в порядке (например, на Loan_Date
), вы можете использовать этот подход, используя tidyverse
. Используйте group_by
, чтобы оценить ссуды для данного Customer_ID
, а затем используйте row_number
и n()
, чтобы определить желаемые значения столбца.
library(tidyverse)
df %>%
group_by(Customer_ID) %>%
mutate(LoanCounter = row_number(),
MaxLoan = n(),
FirstLoan = ifelse(row_number() == 1, 1, 0),
LastLoan = ifelse(row_number() == n(), 1, 0))
Выход
# A tibble: 9 x 7
# Groups: Customer_ID [2]
Customer_ID Customer_Account Loan_Date LoanCounter MaxLoan FirstLoan LastLoan
<dbl> <dbl> <dbl> <int> <int> <dbl> <dbl>
1 100100 1001 200801 1 5 1 0
2 100100 1002 200902 2 5 0 0
3 100100 1003 201003 3 5 0 0
4 100100 1004 201105 4 5 0 0
5 100100 1005 201209 5 5 0 1
6 100102 2001 201805 1 4 1 0
7 100102 2006 201903 2 4 0 0
8 100102 2010 201905 3 4 0 0
9 100102 238 202002 4 4 0 1
Данные
df <- structure(list(Customer_ID = c(100100, 100100, 100100, 100100,
100100, 100102, 100102, 100102, 100102), Customer_Account = c(1001,
1002, 1003, 1004, 1005, 2001, 2006, 2010, 238), Loan_Date = c(200801,
200902, 201003, 201105, 201209, 201805, 201903, 201905, 202002
)), class = "data.frame", row.names = c(NA, -9L))