这应该是我预期的输出:我需要用它来计算翻滚率。通过这段代码:我尝试了下面的代码,但没有成功。
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
请建议:提前致谢
答案 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()