Вложенный цикл for для заполнения матрицы

#r #for-loop #matrix #tidyverse #apply

Вопрос:

У меня есть таблица, в которой один столбец представляет собой процентную ставку, а другой-применимое количество лет (сроков). То, что я пытаюсь сделать, — это использовать эти два столбца для динамического заполнения матрицы.

Мои примерные данные:

 rate_table lt;- tibble(rates = c(1,2,3,4,5,6,7),terms = c(3,3,3,5,5,5,5))  

Требуется окончательный вывод матрицы (например, не столбец и строка года-это просто имена строк/столбцов).:

год 2020 2021 2022 2023 2024 2025 2026
2020 1 1 1 4 4 4 4
2021 2 2 2 5 5 5
2022 3 3 3 6 6
2023 4 4 4 4
2024 5 5 5
2025 6 6
2026 7

Идея заключается в том, что если срок составляет 3 года, как в первой строке таблицы ставок, то через 3 года матрица будет отражать ставку, которая составляет 3 года в будущем. т. е. значение 2020 года равно 1 с 3 годами. как только он превысит 3 года, он примет значение 2023 года 4.

Вложенный цикл for, который я использую в настоящее время, чтобы попытаться это сделать:

 m1 lt;- matrix(0,nrow = nrow(rate_table),ncol = nrow(rate_table))  for (i in 1:nrow(m1)){  for (j in 1:ncol(m1)){  if (i gt; j) {  m1[i,j] lt;- 0  } else if (j-1 gt;= rate_table$terms[i]){  m1[i,j] lt;- rate_table$rates[i j-1]  } else if (i lt;= j){  m1[i,j] lt;- rate_table$rates[i]  }  } }  

Однако этот цикл неверен, и я надеялся, что кто-нибудь там сможет дать некоторые указания или придумать альтернативный вариант.

Заранее большое спасибо.

Комментарии:

1. Не уверен, что полностью понимаю вашу просьбу. Предложение «Идея…» не очень понятно. Не могли бы вы шаг за шагом объяснить рассуждения, которые приводят к нужной вам матрице. Заранее спасибо.