如何将一个观察值与先前的观察值相乘,但仅当某个条件为真时

问题描述 投票:1回答:1

我有包含变量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的数据。我想创建一个新的权重,将原来的权重乘以以前的权重,然后采用这个新创建的权重,然后......>

r for-loop
1个回答
0
投票

也许,这有帮助

library(dplyr)
data %>% 
    group_by(grp = cumsum(start == 0)) %>%
    mutate(weight = cumprod(weight)) %>%
    ungroup %>%
    select(-grp)
© www.soinside.com 2019 - 2024. All rights reserved.