【问题标题】:multiply each element in a vector by the next element[r]将向量中的每个元素乘以下一个元素[r]
【发布时间】:2020-09-30 00:27:21
【问题描述】:
vector=c(1.007469, 1.007469, 1.007369, 1.007419, 1.007269, 1.007769, 1.007969, 1.007469, 1.007469 ,1.007469, 1.007469, 1.007469, 1.004469, 1.007469, 1.007469, 1.006469, 1.007469 ,1.007469 ,1.007469 ,1.007469 ,1.007869 ,1.007469 ,1.007469 ,1.007469 ,1.007469, 1.007469,
 1.007469, 1.007469 ,1.007469, 1.007469)

我试图找到累积利率,为此我需要在每个利率中添加 1(我已经这样做并将其保存到矢量对象中),然后将每个利率乘以下一个,然后 @987654323 @在结果中,如何将向量的第一个元素乘以下一个等?

【问题讨论】:

标签: r


【解决方案1】:

如果我们需要返回一个相同长度的vector,并且每个值都乘以之前的乘法值,我们可以使用cumprod

cumprod(vector-1)

如果我们需要退货单品,则使用prod

prod(vector-1)

或者Reduce*

Reduce(`*`, vector-1)

【讨论】:

  • 我以为你想返回与原始向量相同的长度和相乘的值。如果您想要单个值,请使用 prod
  • 谢谢,这种选择最后一个值和使用 prod 的方法都能得到正确的结果。
【解决方案2】:

你也可以使用 for 循环:

v <- c(1.007469, 1.007469, 1.007369, 1.007419, 1.007269, 1.007769, 1.007969, 1.007469, 1.007469 ,1.007469, 1.007469, 1.007469, 1.004469, 1.007469, 1.007469, 1.006469, 1.007469 ,1.007469 ,1.007469 ,1.007469 ,1.007869 ,1.007469 ,1.007469 ,1.007469 ,1.007469, 1.007469,
 1.007469, 1.007469 ,1.007469, 1.007469)

res <- -100
for(i in 1:length(v)) {
    res <- res * v[i]
}
print(res)

cumulative_v = -100 * cumprod(v)
stopifnot(all.equal(res, cumulative_v[length(cumulative_v)]))

输出:

[1] -124.6208

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 2020-07-03
    相关资源
    最近更新 更多