我有来自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)
}
答案 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