преобразовать данные поперечного сечения в данные панели в R - PullRequest
0 голосов
/ 03 марта 2019

У меня датафрейм выглядит следующим образом:

loan id    borrowing_date  principal    maturity_date    maturity_time(years)
01         2013-03-03      1000000      2015-03-03       02
02         2015-07-30      2000000      2017-07-29       02
03         2017-10-03      3000000      2020-10-02       03

Я хочу, чтобы каждая дата заимствования и дата погашения увеличивалась ежеквартально в течение следующих 10 лет.то есть это должно выглядеть как

loan id    borrowing_date  principal    maturity_date    maturity_time(years)
01         2013-03-03      1000000      2015-03-03       02
01         2013-06-03      1000000      2015-06-03       02
01         2013-09-03      1000000      2015-09-03       02
.              .              .              .           .
.              .              .              .           .
01         2023-03-03      1000000      2025-03-03       02
.              .              .              .           .
.              .              .              .           .
03         2017-10-03      3000000      2020-10-02       03
03         2018-01-03      3000000      2021-01-02       03
03         2018-04-03      3000000      2021-04-02       03
.              .              .              .            . 
.              .              .              .            .
03         2027-10-03      3000000      2030-10-02       03

Как я могу это сделать?

1 Ответ

0 голосов
/ 03 марта 2019
Опция

A data.table с использованием lubridate

library(data.table)
library(lubridate)
setDT(df)[, .(
    borrowing_date = seq(as.Date(borrowing_date), as.Date(borrowing_date) %m+% years(10), by = "quarter"),
    principal,
    maturity_date = seq(as.Date(maturity_date), as.Date(maturity_date) %m+% years(10), by = "quarter"),
    maturity_time.years.),
    by = loan.id]
#    loan.id borrowing_date principal maturity_date maturity_time.years.
# 1:       1     2013-03-03   1000000    2015-03-03                    2
# 2:       1     2013-06-03   1000000    2015-06-03                    2
# 3:       1     2013-09-03   1000000    2015-09-03                    2
# 4:       1     2013-12-03   1000000    2015-12-03                    2
# 5:       1     2014-03-03   1000000    2016-03-03                    2
#---
#119:       3     2026-10-03   3000000    2029-10-02                    3
#120:       3     2027-01-03   3000000    2030-01-02                    3
#121:       3     2027-04-03   3000000    2030-04-02                    3
#122:       3     2027-07-03   3000000    2030-07-02                    3
#123:       3     2027-10-03   3000000    2030-10-02                    3

Объяснение: Мы используем seq.Date для генерации последовательности дат by = "quarter", где конечной датой является исходная дата плюс 10лет (или в lubridate синтаксис %m+% years(10)).

Обратите внимание, что имена столбцов изменились (обычно в R плохо иметь имена столбцов со специальными символами, такими как пробелы, запятые и т. д.).


Пример данных

df <- read.table(text =
    "'loan id'    borrowing_date  principal    maturity_date    maturity_time(years)
01         2013-03-03      1000000      2015-03-03       02
02         2015-07-30      2000000      2017-07-29       02
03         2017-10-03      3000000      2020-10-02       03", header = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...