【问题标题】:Rolling cumulative product based on elseif condition基于 elseif 条件的滚动累积产品
【发布时间】:2017-03-09 09:44:49
【问题描述】:

我正在寻找一种在基于附加列的 ifelse 语句中进行滚动乘积的方法?

我的数据是这样的

    A    B   C 
 1  1    1   
 2  3    1   
 3  5    0
 4  7    0

等价的excel公式是

C3 = IF(B3=0,(1+A3/10)*C2,1)

我尝试过使用

ifelse(B==0,cumprod(c(1,(A[-1]/10+1))),1)

我无法让它在这种情况下工作,因为它总是只引用 A 列中的数据。

我希望得到以下结果

    A    B   C 
 1  1    1   1
 2  3    1   1
 3  5    0   1.5
 4  7    0   2.55

提前致谢

【问题讨论】:

  • 你写了elseif
  • ...大概你的意思是ifelse()
  • 您能否以可重复的方式共享您的数据(例如,与dput)?每列中的行数不相等意味着您没有数据框或矩阵,因此很高兴看到有什么结构。它们只是向量吗?
  • 我的代码中有 elseif,数据看起来像示例,我开始时 C 列为空,我只是将起始值放入,因为它们将在不使用 ifelse 的情况下获得分配的 1滚动产品

标签: r cumulative-sum


【解决方案1】:

试试这个:

df$C <- cumprod(with(df, ifelse(B==0, A/10+1, 1)))

或者使用Reduce:

df$C <- Reduce('*', with(df, ifelse(B==0, A/10+1, 1)), accumulate = T)

【讨论】:

    猜你喜欢
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多