我有一个矩阵,其中每一行由零和一个单词组成,比如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
- 循环来获取另一个向量给出的位置处的元素的向量?
我一直在寻找这个,但我真的不知道怎么称呼它,因此我没有找到任何有用的东西。如果这个问题已经在某个地方徘徊,请道歉......
答案 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)
。