2016-02-10 45 views
3

我有一个矩阵,其中每行由零和一个单一的,说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?

我一直在寻找这个,但我真的不知道如何调用这个,因此我没有找到任何有用的东西。

回答

3

我们可以使用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)按照意见。

+1

并不总是需要努力,谢谢让我重新走上正轨...... –

相关问题