#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. Не уверен, что полностью понимаю вашу просьбу. Предложение «Идея…» не очень понятно. Не могли бы вы шаг за шагом объяснить рассуждения, которые приводят к нужной вам матрице. Заранее спасибо.