数据集:
date bal
1/31/2013 10
1/31/2013 11
1/31/2013 12
1/31/2013 13
1/31/2013 14
2/28/2013 20
2/28/2013 30
2/28/2013 40
2/28/2013 50
2/28/2013 60
3/30/2013 10
3/30/2013 11
3/30/2013 12
3/30/2013 13
3/30/2013 15
使用的代码:
bb <- read.csv("abc.csv", stringsAsFactors=T, header=T)
bb
library(dplyr)
new_data <- bb %>%
mutate(D = (bal) / lag(bal[1:5])) %>%
data.frame()
new_data
我们划分第 2 组(日期 - 2013 年 2 月 28 日的第二行 = 30)/(第 1 组 - 2013 年 1 月 31 日的第一行 = 10)
即:30 / 10 = 3.000、40/11 = 3.63、50/12 = 4.16 等等。
从上面的代码得到的输出:
date bal D
1 1/31/2013 10 NA
2 1/31/2013 11 1.100000
3 1/31/2013 12 1.090909
4 1/31/2013 13 1.083333
5 1/31/2013 14 1.076923
6 2/28/2013 20 NA
7 2/28/2013 30 3.000000
8 2/28/2013 40 3.636364
9 2/28/2013 50 4.166667
10 2/28/2013 60 4.615385
11 3/30/2013 10 NA
12 3/30/2013 11 1.100000
13 3/30/2013 12 1.090909
14 3/30/2013 13 1.083333
15 3/30/2013 15 1.153846
现在这里的问题是:
第一组保留为参考 = 除数,即 10, 11,12,13
这意味着以下所有日期组(bal)都将除以第一个参考组。
我们希望每次除数应按下一组日期递增,并与下面的组(股息)相同,依此类推。
date bal D
1 1/31/2013 10 NA
2 1/31/2013 11 NA
3 1/31/2013 12 NA
4 1/31/2013 13 NA
5 1/31/2013 14 NA
6 2/28/2013 20 NA
7 2/28/2013 30 3.000000 - 30 / 10 = 3
8 2/28/2013 40 3.636364 - 40 / 11 = 3.63
9 2/28/2013 50 4.166667 - 50 / 12 = 4.16
10 2/28/2013 60 4.615385 - 60 / 13 = 4.61
11 3/30/2013 10 NA NA
12 3/30/2013 11 1.100000 - 11 / 20 = 0.55
13 3/30/2013 12 1.090909 - 12 / 30 = 0.4
14 3/30/2013 13 1.083333 - 13 / 40 = 0.325
15 3/30/2013 15 1.153846 - 15 / 50 = 0.3
我期待上面的输出。