R中滚动率的计算

calculations in Roll Rate in R

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

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

请建议:提前致谢

假设您总是有一组具有相同日期的三行,我们可以使用 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()