У меня есть список данных, в столбце «Условный» / «Данные» указано множественное моделирование условного баланса облигации в данном месяце. T1, T2, T3, T4 представляют собой первоначальный транш баланса 4 траншей указанной облигации.
#### Tranche ##
T1 <- 20
T2 <- 50
T3 <- 20
T4 <- 10
##All
myList3 <- list()
myList3[[1]]<- as.data.frame(matrix(c(1,1,1,1,1,0,1,2,3,4,100,90,40,30,0), nrow=5, ncol=3))
myList3[[2]]<- as.data.frame(matrix(c(2,2,2,2,2,0,1,2,3,4,100,80,50,10,0), nrow=5, ncol=3))
colnames <- c("path","month", "Notional")
data<-lapply(myList3, setNames,colnames)
print(data)
[[1]]
path month Notional
1 1 0 100
2 1 1 90
3 1 2 40
4 1 3 30
5 1 4 0
[[2]]
path month Notional
1 2 0 100
2 2 1 80
3 2 2 50
4 2 3 10
5 2 4 0
T1, T2, T3, T4 выплачиваются в последовательном порядке , т. Е. T1 выплачивается первым, T2-4 не выплачивается до того, как T1 выплачивается (уменьшено до 0)Затем T2, затем T3, затем T4. Основываясь на том, как столбец «Условный» изменяется со временем, мы знаем, как каждый транш выплачивается каждый месяц. Цель здесь состоит в том, чтобы бросить список в блок кода для создания ежемесячных данных остатка баланса T1, T2, T3, T4 на основе того, как облигация заплатила . См. Пример желаемого результата ниже:
##Desired output
##Desired
myList4 <- list()
myList4[[1]]<- as.data.frame(matrix(c(1,1,1,1,1,0,1,2,3,4,100,90,40,30,0,20,10,0,0,0,50,50,10,0,0,20,20,20,20,0,10,10,10,10,0), nrow=5, ncol=7))
myList4[[2]]<- as.data.frame(matrix(c(2,2,2,2,2,0,1,2,3,4,100,80,50,10,0,20,0,0,0,0,50,50,20,0,0,20,20,20,0,0,10,10,10,10,0), nrow=5, ncol=7))
colnames <- c("path","month", "data","T1","T2","T3","T4")
data<-lapply(myList4, setNames,colnames)
print(data)
> print(data)
[[1]]
path month data T1 T2 T3 T4
1 1 0 100 20 50 20 10
2 1 1 90 10 50 20 10
3 1 2 40 0 10 20 10
4 1 3 30 0 0 20 10
5 1 4 0 0 0 0 0
[[2]]
path month data T1 T2 T3 T4
1 2 0 100 20 50 20 10
2 2 1 80 0 50 20 10
3 2 2 50 0 20 20 10
4 2 3 10 0 0 0 10
5 2 4 0 0 0 0 0
Мне удалось написать некоторый код, отражающий логику, но только для одного моделирования (используя вектор для хранения, а не для списка), мне нужен способ применить логикук списку данных, в которых хранится различный условный результат моделируемой связи. код структуры транша, который у меня есть для одиночного моделирования
for (k in 1:length(notional)){
T1_ts[k] <- max(0, notional[k] - T2 - T3 - T4)
T2_ts[k] <- max(0, notional[k] - T1_ts[k] - T3 - T4)
T3_ts[k] <- max(0, notional[k] - T1_ts[k] - T2_ts[k] - T4)
T4_ts[k] <- max(0, notional[k] - T1_ts[k] - T2_ts[k] - T3_ts[k])
}
Нужен способ применить логику к списку данных, в котором хранятся разные результаты моделирования.
Также, вероятно, будет использовать список многов будущем и проделать большую массовую работу для получения списка многих фреймов данных, в какой конкретный пакет мне действительно следует погрузиться (т. е. dplyr, tidyverse и т. д.)?