求和向量元素直到遇到正元素-R

求和向量元素直到遇到正元素-R,r,sum,R,Sum,我是R的新手,我正在翻阅一本名为“使用R发现统计数据”的书。 虽然这本书暗示你不需要任何统计背景,但其中一些内容并未涵盖/解释 我试图求向量元素的和,从位置1开始,直到一个正元素出现 我发现这个问题和我想达到的目标非常相似。然而,当我实现它时,它似乎并不总是有效(有时它似乎包含了第一个积极因素) 我的计划是: vecA <- runif(10, -10, 10); sumA <-sum(vecA [1:min(which(vecA < 0))]); 要使用>not

我是R的新手,我正在翻阅一本名为“使用R发现统计数据”的书。 虽然这本书暗示你不需要任何统计背景,但其中一些内容并未涵盖/解释

我试图求向量元素的和,从位置1开始,直到一个正元素出现

我发现这个问题和我想达到的目标非常相似。然而,当我实现它时,它似乎并不总是有效(有时它似乎包含了第一个积极因素)

我的计划是:

  vecA <- runif(10, -10, 10);
  sumA <-sum(vecA [1:min(which(vecA < 0))]);

要使用>not<对所有元素求和,直到达到第一个正元素

当前从1求和,直到达到第一个负值(包括第一个负值)


函数which()将返回所有正元素的位置,然后将总和从1取到第一个正元素的位置-1将保证对所有负元素求和,直到达到第一个正元素为止

当前从1求和,直到达到第一个负值(包括第一个负值)


函数which()将返回所有正元素的位置,然后将总和从1取到第一个正元素的位置-1将保证您对所有负元素求和。您可以使用以下代码:

sum(vecA * !cumsum(vecA > 0))

如果第一个元素为正数或所有元素为负数,也可以使用此代码。

您可以使用以下代码:

sum(vecA * !cumsum(vecA > 0))

如果第一个元素为正或所有元素均为负,此功能也有效。

匹配函数通常最快找到向量中某个元素的第一次出现,因此此功能的另一个版本可能如下所示:

first.positive <- match(TRUE, vecA > 0)
sumA <- sum( vecA[ 1 : first.positive ] ) - vecA[first.positive]
first.0)

sumA匹配函数通常是最快找到向量中某个元素第一次出现的函数,因此另一个版本可能如下所示:

first.positive <- match(TRUE, vecA > 0)
sumA <- sum( vecA[ 1 : first.positive ] ) - vecA[first.positive]
first.0)


sumA你所做的也许是最简单的方法。评论中的答案很好,但过于复杂,很难理解一个简单的想法。如果第一个元素为正(没有可求和的元素),您希望的输出是什么?@BlueMagister我认为它应该返回0?无论如何,这似乎是合理的。你所做的也许是最简单的方法。评论中的答案很好,但过于复杂,很难理解一个简单的想法。如果第一个元素为正(没有可求和的元素),您希望的输出是什么?@BlueMagister我认为它应该返回0?不管怎么说,这似乎很合理。哦!愚蠢的错误。现在有道理了。谢谢你接受《时代邮报》。回答得很好。:)如果所有元素都是负数,这也会起作用吗?如下面的答案所示?@Reanimation不,如果所有元素都是负数,它就不起作用。啊,没关系。我只是在检查我在R里没有做什么蠢事,当时我正在尝试。谢谢,噢!愚蠢的错误。现在有道理了。谢谢你接受《时代邮报》。回答得很好。:)如果所有元素都是负数,这也会起作用吗?如下面的答案所示?@Reanimation不,如果所有元素都是负数,它就不起作用。啊,没关系。我只是在检查我在R里没有做什么蠢事,当时我正在尝试。谢谢,啊。谢谢,太好了。我以前没有见过
cumsum()
函数。谢谢你的发帖。这是一个很好的回答,供你使用!我的朋友啊。谢谢,太好了。我以前没有见过
cumsum()
函数。谢谢你的发帖。这是一个很好的回答,供你使用!我的朋友