以R为单位的滚动率计算

时间:2017-06-12 09:48:05

标签: r hidden-markov-models quantitative-finance risk-management risk-analysis

这应该是我预期的输出:我需要用它来计算翻滚率。通过这段代码:我尝试了下面的代码,但没有成功。

test_data$Group <- rep(1:5, nrow(test_data) / 5)
library(dplyr)
new_data <- test_data %>% 
group_by(Group) %>% 
mutate(D = (bal) /lag(bal, n=2)) %>%
data.frame()

OUTPUT I GOT: 
   date bal Group        D
1   1/31/2013  10     1       NA
2   1/31/2013  11     2       NA
3   1/31/2013  12     3       NA
4   1/31/2013  13     4       NA
5   1/31/2013  14     5       NA
6   2/28/2013  20     1       NA
7   2/28/2013  30     2       NA
8   2/28/2013  40     3       NA
9   2/28/2013  50     4       NA
10  2/28/2013  60     5       NA
11  3/30/2013  10     1 1.000000
12  3/30/2013  11     2 1.000000
13  3/30/2013  12     3 1.000000
14  3/30/2013  13     4 1.000000
15  3/30/2013  15     5 1.071429

预期产出:

date        bal  D
1/31/2013   10   na 
1/31/2013   11   na
1/31/2013   12   na
1/31/2013   13   na
1/31/2013   14   na
2/28/2013   20   na
2/28/2013   30   3.00
2/28/2013   40   3.63 
2/28/2013   50   4.16
2/28/2013   60   4.61
3/30/2013   10   na 
3/30/2013   11   0.55
3/30/2013   12   0.4
3/30/2013   13   0.35
3/30/2013   15   0.25

请建议:提前致谢

1 个答案:

答案 0 :(得分:2)

假设您总是拥有三行具有相同日期的组,我们可以使用dplyr

首先,我们创建一个名为Group

的分组变量
test_data$Group <- rep(1:3, nrow(test_data) / 3)

然后我们使用dplyr对数据进行分组,然后创建所需的新列。它会将结果保存在对象new_data中。

library(dplyr)

new_data <- test_data %>% 
  group_by(Case) %>% 
  mutate(D = lag(Balance) / Balance) %>%
  data.frame()