У меня есть набор данных как здесь:
customer_id <- c("1","1","1","2","2","2","2","3","3","3")
account_id <- as.character(c(11,11,11,55,55,55,55,38,38,38))
time <- c(as.Date("2017-01-01","%Y-%m-%d"), as.Date("2017-02-01","%Y-%m-%d"), as.Date("2017-03-01","%Y-%m-%d"),
as.Date("2017-12-01","%Y-%m-%d"), as.Date("2018-01-01","%Y-%m-%d"), as.Date("2018-02-01","%Y-%m-%d"),
as.Date("2018-03-01","%Y-%m-%d"), as.Date("2018-04-01","%Y-%m-%d"), as.Date("2018-05-01","%Y-%m-%d"),
as.Date("2018-06-01","%Y-%m-%d"))
tenor <- c(1,2,3,1,2,3,4,1,2,3)
variable_x <- c(87,90,100,120,130,150,12,13,15,14)
my_data <- data.table(customer_id,account_id,time,tenor,variable_x)
Теперь я хотел бы создать новые переменные "PD_Q1" вплоть до "PD_Q20", которые будут равны значению "variable_x", когда "tenor"от 1 до 20, т. е. PD_Q1 равно значению variable_x, если tenor = 1, PD_Q2 равно значению variable_x, если tenor = 2 и т. д., и я хотел бы сделать это с помощью customer_id, account_id.У меня есть код для этого, однако только для PD_Q1, и я хотел бы сделать цикл, который зацикливается на i = 1:20, в котором я изменяю просто тенор == i (это легко) и ссылаюсь на столбцы PD_Qi в этом цикле, что является проблемой для меня.Код для одного значения i находится здесь:
my_data[tenor == 1, PD_Q1_temp := variable_x, by = c("customer_id", "account_id")]
list_accs <- my_data[tenor == 1, c("customer_id", "account_id", "PD_Q1_temp")]
list_accs <- unique(list_accs, by = c("customer_id", "account_id"))
names(list_accs) = c("customer_id", "account_id", "PD_Q1")
my_data = merge(x = my_data, y = list_accs, by = c("customer_id", "account_id"), all.x = TRUE)
my_data$PD_Q1_temp <- NULL
Теперь, можете ли вы посоветовать, как сделать цикл от 1 до 20, в котором бы изменились тенор, PD_Q1_temp и PD_Q1?В частности, я не знаю, как ссылаться на имена столбцов или переменные, используя этот индекс i в цикле.
Ожидаемый результат для i = 1 и i = 2 (создание переменных PD_Q1 и PD_Q2) находится здесь:
> my_data
customer_id account_id time tenor variable_x PD_Q1 PD_Q2
1: 1 11 2017-01-01 1 87 87 90 2: 1 11 2017-02-01 2 90 87 90 3: 1 11 2017-03-01 3 100 87 90 4: 2 55 2017-12-01 1 120 120 130 5: 2 55 2018-01-01 2 130 120130 6: 2 55 2018-02-01 3 150 120 130 7: 2 55 2018-03-01 4 12 120 130 8: 3 38 2018-04-01 1 13 13 15 9: 3 38 2018-05-01 215 13 15 10: 3 38 2018-06-01 3 14 13 15
Теперь я хочу создать PD_Q3, PD_Q4 и т. Д. В цикле, используя мой код выше, который создает одну такую переменную.