在没有for循环的情况下减少值

时间:2019-02-28 18:15:20

标签: r

我想将一个值(first.value)与一个百分比下降值(decline.vector)的矢量相减(即相乘),其中第一个值与起始百分比下降值相抵,然后该输出值就是相对于第二个百分比下降值下降了,依此类推。我认为在R中有一种比编写for循环来重新分配新值并cbind创建新向量更优雅的方法,但是我仍然是一个新手。

下降向量不是下面的序列,这只是一个例子。 虽然可以对“ by =”是向量的位置进行排序吗?我在?seq中没有发现任何暗示可能的东西。

特此:

Project 1

所需的输出:

<dependency>
  <groupId>com.main.sub</groupId>
  <artifactId>project2-artId</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

2 个答案:

答案 0 :(得分:2)

您可以使用基本R中的Reduce功能来实现

first.value <- 100    
decline.vector <- c(0.85, 0.9, 0.925, 0.95, 0.975)    
Reduce(`*`, decline.vector, first.value, accumulate = TRUE)
# [1] 100.00000  85.00000  76.50000  70.76250  67.22437  65.54377

答案 1 :(得分:2)

您也可以使用cumprod

first.value * cumprod(c(1, decline.vector))
# [1] 100.00000  85.00000  76.50000  70.76250  67.22438  65.54377

如果您不希望first.value成为输出的第一个元素,请这样做

first.value * cumprod(decline.vector)
# [1] 85.00000 76.50000 70.76250 67.22438 65.54377