2015-02-24 5 views
2

Предположим, у меня есть 2 матрицы m и m.ind. Первый содержит фактические данные, тогда как меньший содержит индексы строк.R, Выберите подмножество матрицы

m 
      [,1]  [,2]  [,3]  [,4] 
[1,] 0.23094453 -0.1379296 0.4173233 -1.7767756 
[2,] -1.15772946 -0.1111935 1.0654023 0.6228674 
[3,] 0.24707599 -0.6900143 0.9702020 -0.5222834 
[4,] -0.09111356 -0.2217942 -0.1016292 1.3222310 
[5,] 1.75737562 0.1829077 1.4032035 -0.3634403 

m.ind 
    [,1] [,2] [,3] [,4] 
[1,] 2 1 3 5 
[2,] 2 2 4 4 

Я хотел бы создать подмножество матрицы m, идентификаторы которой являются элементами матрицы m.ind.

m.sub 
      [,1]  [,2]  [,3]  [,4] 
[1,] -1.157729 -0.1379296 0.9702020 -0.3634403 
[2,] -1.157729 -0.1111935 -0.1016292 1.3222310 

Я попытался функции ниже:

test=apply(m, 2, function(x) x[m.ind]) 

Ваша помощь ценится.

+1

Пожалуйста сделайте вашу проблему ** [легко воспроизводимым] (http://stackoverflow.com/a/28481250/ 2725969) **; обратите внимание, как Марат сделал это для вас, попробуйте сделать это в следующий раз. – BrodieG

ответ

2

Вы можете производить индексы для подмножества m либо

m.ind2 <- m.ind + nrow(m)*(col(m.ind)-1) 

или

m.ind2 <- cbind(as.vector(m.ind),as.vector(col(m.ind))) 

А потом сделать:

matrix(m[m.ind2],nrow=nrow(m.ind)) 

Это решение использует тот факт, что matrix в R является по существу, vector с dim атрибутов.

Вот набор выборки данных:

set.seed(1) 
m <- matrix(runif(20),ncol=4) 
m.ind <- matrix(c(2,2,1,2,3,4,5,4),nrow=2) 

и выход:

  [,1]  [,2]  [,3]  [,4] 
[1,] 0.3721239 0.8983897 0.6870228 0.7774452 
[2,] 0.3721239 0.9446753 0.3841037 0.3800352 
Смежные вопросы