2017-12-11 4 views
1

rb_date 열과 값 열이있는 테이블에서 가격 수준 (레벨)을 계산하려고합니다. 시작 기준 수준이 100이라고 가정하고 각 기간의 가격 수준 (동일한 rb_date 행을 의미 함)은 단순히 기본 수준을 반환하고 각 기간의 기본 수준은 이전 기간의 가격 수준의 마지막 값입니다. 나는 그것을 data.table을 사용하여 실현할 수있다. 어떻게 내가 dplyr에서 그것을 할 수 있을까?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

가 '? dplyr :: lag' 유용 :: slice()를 사용 dplyr? – spinodal

+0

나는 그것을하는 더 좋은 방법을 모른다. 이전 기간으로 되돌아 가므로 지연이 도움이되지 않을 수 있습니다. 임이 틀렸다는 것을 지적하십시오. –

답변

0

귀하의 질문에있는 코드가 실제로 귀하의 설명에 영향을 줄지 의심 스럽습니다. 마지막 레벨 값이 올바르게 계산되지 않은 것으로 보입니다. 새로운 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] 
} 
+0

내 질문에 답변 해 주셔서 감사합니다. 미안하지만 내 질문에 약간의 명료성이 필요합니다. 따라서 각 기간의 기본 레벨 (일부 rb_date가있는 행)은 이전 기간의 마지막 레벨입니다. 이 경우에는 dplyr 솔루션을 찾고 있습니다. –