在包含rb_date列和值列的表中,我想计算价格水平(级别)。假设起始基准水平为100,每个时期内的价格水平(意味着具有相同rb_date的行)仅为返回*基准水平,并且每个期间的基准水平是前一时期的价格水平的最后一个值。 。我可以通过使用data.table来实现它。我怎么能在dplyr中做到这一点?
下面是我在data.table中如何做到这一点的可重现的例子。
library(data.table)
library(dplyr)
table <- tibble(rb_date = rep(c("2017-01-01", "2017-02-01", "2017-03-01"), 3),
return = rnorm(9)) %>% arrange(rb_date)
rb_dates = sort(unique(table$rb_date))
table = as.data.table(table)
level_lag = 100
for (i in 1:length(rb_dates)) {
table[rb_date == rb_dates[i], level := level_lag * (1 + return)]
level_lag = table[rb_date == rb_date[i], last(level)]
}
答案 0 :(得分:0)
我怀疑你问题中的代码是否真的符合你的描述。似乎没有正确计算最后一个级别的值。 在此解决方案中,使用dplyr :: slice()
创建一个新的tibble,其中包含每个句点的最后一个值。t1 <- table %>%
group_by(rb_date) %>%
slice(n())
t1$level <- NA
level_lag <- 100
for (i in 1:nrow(t1)) {
t1$level[i] <- level_lag*(1+t1$return[i])
level_lag <- t1$level[i]
}