我有包含变量start和weight的数据。我想创建一个将原始权重乘以先前权重的新权重,然后将这个新创建的权重乘以该权重再乘以先前权重,依此类推,直到数据集结束。我只希望为起始大于0的所有观察结果计算这些新的权重。
start<-c(0,1,2,3,4,0,1,0,1,0,1,0,0,0,1) weight<-c(1.427,1.073,1.074,1.074,15.004,1.428,1.073,1.439,1.074,1.416,1.463,1.439,1.074,1.439,1.451) data<-as.data.frame(cbind(start,weight))
到目前为止,我有运行for循环的代码:
for (i in 1:4){ data$new_weight<-ifelse(data$start==i, data$weight * shift(data$weight, 1L, type="lag"), data$weight) }
以该数据框结尾:
new_weight<-c(1.427,1.531,1.645,1.766,26.496,1.428,1.531,1.439,1.546,1.416,1.463,1.439,1.546,1.439,1.451)
data<-cbind(data, new_weight)
data
我有包含变量start和weight的数据。我想创建一个新的权重,将原来的权重乘以以前的权重,然后采用这个新创建的权重,然后......>
也许,这有帮助
library(dplyr)
data %>%
group_by(grp = cumsum(start == 0)) %>%
mutate(weight = cumprod(weight)) %>%
ungroup %>%
select(-grp)