我是R的新手,我正在翻阅一本名为“使用R发现统计数据”的书。 虽然本书暗示您不需要任何统计背景,但某些内容未被涵盖/解释......
我试图将从位置1开始直到存在正元素的向量元素相加。
我发现this问题与我想要达到的问题非常相似。然而,当我实现它时,它似乎并不总是起作用(它有时似乎包括第一个正元素)...
我的节目是:
vecA <- runif(10, -10, 10);
sumA <-sum(vecA [1:min(which(vecA < 0))]);
有没有更健壮的方法来计算这个而不使用每次都有效的循环并且不添加正元素?我还没有进入书籍的循环阶段。
我还找到了this网站,它提出了类似的问题,但答案错误:
sum(vecA [seq_len(which.max(vecA > 0)]);
答案 0 :(得分:3)
您可以使用以下代码:
sum(vecA * !cumsum(vecA > 0))
如果第一个元素为正数或所有元素都为负数,这也有效。
答案 1 :(得分:1)
你想使用&gt;不是&lt;总结所有元素,直到达到第一个正面元素。
您目前正在从1开始求和,直到达到第一个负值(包括第一个负值)。
sum(vecA[1:min(which(vecA>0))-1])
which()函数将返回正元素的所有位置,然后将1之和取为第一个正数的位置 - 1将保证您对所有负元素求和
答案 2 :(得分:1)
匹配函数通常是最快找到向量中某个元素的第一个出现位置,因此其他版本可能如下所示:
first.positive <- match(TRUE, vecA > 0)
sumA <- sum( vecA[ 1 : first.positive ] ) - vecA[first.positive]
如果肯定元素是第一个,这将给你零。