R中的收益率曲线排序

时间:2014-11-29 11:11:56

标签: r if-statement for-loop yield curve

我有来自FedYieldCurve的数据集

data(FedYieldCurve)

看起来如下,但有更多的句号

            R_3M  R_6M  R_1Y  R_2Y  R_3Y  R_5Y  R_7Y R_10Y
1981-12-31 12.92 13.90 14.32 14.57 14.64 14.65 14.67 14.59
1982-01-31 14.28 14.81 14.73 14.82 14.73 14.54 14.46 14.43
1982-02-28 13.31 13.83 13.95 14.19 14.13 13.98 13.93 13.86
1982-03-31 13.34 13.87 13.98 14.20 14.18 14.00 13.94 13.87
1982-04-30 12.71 13.13 13.34 13.78 13.77 13.75 13.74 13.62
1982-05-31 13.08 13.76 14.07 14.47 14.48 14.43 14.47 14.30

我想根据收益率曲线的类型(正常,反向或驼峰)对日期进行排序。

第一个问题是如何检查曲线类型? 一种可能性是使用sort,但我真的不知道在这里使用什么参数。我能想象的另一种方法是使用迭代的if函数,但这似乎更难。

确定曲线类型后的第二个问题我如何对它们进行排序。 在这里,我想使用for循环

for (i in 1:ncol(FedYieldCurve))
{
  normal <- sort(FedYieldCurve)
  inverse<- sort(FedYieldCurve)
  humped<- (FedYieldCurve-normal-inverse) 
  list <- rbind(normal, inverse, humped)
}

1 个答案:

答案 0 :(得分:1)

首先,使用diff按行创建差异apply的数据框。我们必须转换t()结果以获取长格式的数据。然后得到一个行向量,其中所有diff都是正数。这些对应于正常曲线。

d_diff <- t(apply(FedYieldCurve, 1, diff)) #difference in yield by maturity
incr <- apply(d_diff, 1, function(x) all(x > 0, na.rm=TRUE)) #all increasing yield
decr <- apply(d_diff, 1, function(x) all(x < 0, na.rm=TRUE)) #all decreasing yield

normal <-FedYieldCurve[incr,]
inverse <-FedYieldCurve[decr,]
humped <-FedYieldCurve[!incr&!decr,]# not incr and not decr