2016-02-10 48 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

並不總是需要努力,謝謝讓我重新走上正軌...... –

相關問題