【发布时间】:2017-06-16 14:31:26
【问题描述】:
数据集:
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
我期待上面的输出。
【问题讨论】:
-
所以日期 Y 的第一个条目应该除以日期 X 的第一个条目(Y 之前的那个)?这是这里的逻辑吗?
-
考虑到 Y[1] = 1/31/2013, bal = 10, and X[2] = 2/28/2013, bal = 30, 所以我们需要除法 - X[2] / Y[1] 等等。应该应用以下相同的逻辑。
-
每个日期的行数总是相同吗? (即在这种情况下都是 5)
-
是的,行数相同。