如何获取存储在向量中的索引的所有元素?

时间:2016-02-10 11:34:11

标签: r indexing

我有一个矩阵,其中每一行由零和一个单词组成,比如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 - 循环来获取另一个向量给出的位置处的元素的向量?

我一直在寻找这个,但我真的不知道怎么称呼它,因此我没有找到任何有用的东西。如果这个问题已经在某个地方徘徊,请道歉......

1 个答案:

答案 0 :(得分:3)

我们可以使用row/column索引来提取与&#39; x&#39;相对应的元素。并且&#39; y&#39;索引,然后得到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)