Я пытаюсь объединить два набора данных доходностей, и мне нужно объединить их по минимальной разнице по срокам погашения.Поскольку я хотел бы рассчитать спрэд между коммерческими кредитами и казначейскими векселями соответствующего срока погашения.Объединение работает, но я ищу лучший способ, возможно, с fuzzy_join
?
library(data.table)
library(zoo)
library(tidyverse)
# Commercial loan issued in 2002 Q1 with a maturity of 119 months
dt.MWE <- structure(list(Issue.Year.Quarter = structure(2002, class = "yearqtr"), Maturity.Date = structure(15385, class = "Date")
, Issue.Months.to.Maturity = 119), row.names = c(NA, -1L), class = c("data.table", "data.frame"))
# Treasury Yields in 2002 Q1 with different maturities
dt.Yields <- structure(list(Year.Quarter = structure(c(2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002), class = "yearqtr"),
Maturity = c(12, 120, 1, 24, 240, 36, 360, 3, 60, 6, 84),
Avg.Treasury.Yield = c(2.32000001271566, 5.0766666730245, 1.73666663964589, 3.20333329836527, 5.74333333969116, 3.74999992052714,
5.42499995231629, 1.75666666030884, 4.46000003814697, 1.89666664600372, 4.8799999554952))
, row.names = c(NA, -11L), class = c("data.table", "data.frame"))
dt.join.result <- dt.MWE %>% inner_join(x = . , y = dt.Yields
, by = c(Issue.Year.Quarter = "Year.Quarter")) %>% mutate(.data = ., Dist.Maturity = abs(Issue.Months.to.Maturity - Maturity)) %>% group_by(.data = .,Issue.Year.Quarter )%>% mutate(.data = ., rank.Dist.Maturity = row_number(Dist.Maturity)) %>% dplyr::filter(rank.Dist.Maturity == 1) %>% data.table(.)
> Issue.Year.Quarter Maturity.Date Issue.Months.to.Maturity Maturity Avg.Treasury.Yield Dist.Maturity min.Dist.Maturity
1: 2002 Q1 2012-02-15 119 120 5.076667 1 1