我有一个矩阵,其中每一行都包含零和一个单一的数字,比如说y <- rbind(c(1,0,0), c(0,1,0), c(0,1,0))
,我有一个向量,其中包含每一行的索引,例如x <- c(1,2,3)
和。现在,我想算一下y[i,x[i]] == 1
保持的次数。我知道我可以这样
count <- 0
for(i in 1:3)
count <- count + y[i, x[i]]
但是我很想知道是否有更聪明的方法。有点像count <- sum(y[,x])
。当然这是行不通的,因为y[,x]
给出了一个矩阵。
因此,我的问题是有一种方法可以通过使用apply或任何其他智能技巧(即,不使用for
-loops)来获得在另一个矢量给定位置具有元素的矢量?
我已经在寻找这个了,但是我真的不知道怎么称呼它,因此我没有发现任何有用的东西。抱歉如果这个问题已经在某个地方徘徊了...
我们可以使用row/column
索引来提取与“ x”和“ y”索引相对应的元素,然后获取sum
sum(y[cbind(1:nrow(y), x)])
#[1] 2
如果值不等于1,
sum(y[cbind(1:nrow(y), x)]==1)
或者在这种情况下
sum(diag(y)==1)
#[1] 2
要么
sum(y*diag(y))
编辑:根据注释,将行/列索引从cbind(x,1:ncol(y))
更改cbind(1:nrow(y), x)
为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句