如何将一个观察值与先前的观察值相乘,但仅当某个条件为真时
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 个先前值的平均值/平均值,不包括当前观察值(滚动平均值)
如何在 RxSwift 中观察 UITableView 点击/选择的先前值和当前值?