我正在尝试计算0和1的向量中每个0之后的所有1的总和。
例如,
0 0 1 0 1 将会: 2(第1个0之后的全1)+ 2(第2个零之后的全1)+1(第4个位置的第3个零之后的1)= 5
因此,如果不对6中的每一个向量求和,则只对向量(3 * 2)中的整个向量求和就不会是6。
这是我尝试过的方法,但是不起作用:
a <- rbinom(10, 1, 0.5)
counter <- 0
for (i in a){
if(i == 0)
counter <- counter + sum(a[i:10])
}
print(counter)
我首先创建一个包含10个随机0和1的向量。我做了一个从0开始的计数器,然后尝试计算从每个i位置到最终位置(第10个位置)的总和,但仅当i等于0时。
实际上,它只是计算向量中每个0的所有1的总和。
谢谢您的帮助!
答案 0 :(得分:6)
给出
<div class="questionholder" id="question5">
<div>
<h5>Select all that apply</h5>
<input class="input5" type="checkbox" id="ID1elementColor" name="ID1element" value="color"><label for="ID1elementColor"><p class="radioChoice">Color</p></label>
<input class="input5" type="checkbox" id="ID1elementHeight" name="ID1element" value="height"><label for="ID1elementHeight"><p class="radioChoice">Height</p></label>
<input class="input5" type="checkbox" id="ID1elementWeight" name="ID1element" value="weight"><label for="ID1elementWeight"><p class="radioChoice">Weight</p></label>
</div>
</div>
<div class="holdButtons">
<a class="text2button">Next</a>
</div>
这是一种矢量化方式
x <- c(0, 0, 1, 0, 1)
或使用此输入
sum(rev(cumsum(rev(x))) * !x)
#[1] 5
结果是
set.seed(1)
a <- rbinom(10, 1, 0.5)
a
# [1] 0 0 1 1 0 1 1 1 1 0
逐步
当我们计算sum(rev(cumsum(rev(a))) * !a)
# [1] 16
的反向累积和时,我们得到
rev(x)
结果向我们显示rev(cumsum(rev(x)))
# [1] 2 2 2 1 1
中的每个元素,直到向量的末尾有x
个。
将此向量乘以1
的想法是,我们以后只想将!x
为零,即不是1(或不是x
)的元素相加。
结果
TRUE
这需要加起来以获得所需的输出。
答案 1 :(得分:1)
尝试一下:
a <- rbinom(10, 1, 0.5)
counter <- 0
for (i in seq_along(a)){
if(a[i] == 0)
counter <- counter + sum(a[i:10])
}
print(counter)
在您的示例中,i
不是迭代器。它是a
向量的值。因此,a[i:10]
给出a[0:10]
或a[1:10]
。