引用dplyr

时间:2017-12-11 20:03:37

标签: r dplyr data.table

在包含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)]
}

1 个答案:

答案 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]
}