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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将一个观察值与先前的观察值相乘,但仅当某个条件为真时相关的知识,希望对你有一定的参考价值。

我有包含变量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)

以上是关于如何将一个观察值与先前的观察值相乘,但仅当某个条件为真时的主要内容,如果未能解决你的问题,请参考以下文章

R - 如何制作 n 个先前值的平均值/平均值,不包括当前观察值(滚动平均值)

将PHP字符串中两个字符之间的数字相乘

如何在 RxSwift 中观察 UITableView 点击/选择的先前值和当前值?

如何将列的当前值与sql server和Oracle中同一列的先前值进行比较

可观察的当前值和先前值

R中NA的条件操作