2016-01-26 268 views
0

我正在使用此代碼試圖索引的矩陣R:矩陣索引ř

test <- matrix(0, nrow = 10, ncol = 2) 
test[1:10, 1] <- 1:10 
test[1:10, 2] <- 11:20 

index <- c(1,2,1,1,2,1,1,2,1,2) 

answer <- test[ , index] 

我接收10×10矩陣。但我想收到一個載體。

[1] 1 12 3 4 15 6 7 18 9 20

任何想法?

編輯: 此外,如何使用排除索引(例如,-index)從矩陣中排除值。

[1] 11 2 13 14 5 16 17 8 19 10

回答

1

我們需要row/column索引由相應的位置提取的元素。爲此,我們可以將cbind行序列與'索引'列並獲取元素。

test[cbind(seq_len(nrow(test)), index)] 
#[1] 1 12 3 4 15 6 7 18 9 20 
+0

沒有好的工作。 – Nick

+0

不錯的工作。你會如何改變這種排除索引?當我向'index'添加一個負號時,代碼崩潰,錯誤: '錯誤在測試[cbind(1:nrow(test), - index)]: 矩陣下標中不允許使用負值 – Nick

+0

@Nick'row/column'索引適用於正向索引。一種選擇是使用'%in%'或'setdiff'來分別獲取其他行/列的索引,'cbind'獲取元素。 – akrun