2015-08-25 2 views
0

Я хочу получить вектор длины m, который, учитывая матрицу m x n, для каждой строки дает значение в столбце, идентифицированном другим столбцом (например, столбец «Z»). Я сделал это с помощью цикла:Получить конкретное значение столбца для каждой строки

for (i in 1:dim(data.frame)[1]){vector[i] <- data.frame[i,data.frame$Z[i]]} 

Вы видите простой способ закодировать ее, избегая цикл?

+1

Можете ли вы предоставить воспроизводимый пример и желаемый результат? Мои соображения состоят в том, что вы можете сделать что-то вроде 'vector <- data.frame [cbind (1: nrow (data.frame), data.frame $ Z)]' –

ответ

0

«применить» возможность:

> M <- cbind(matrix(1:15,3,5), "Z"=c(3,1,2)) 

> M 
       Z 
[1,] 1 4 7 10 13 3 
[2,] 2 5 8 11 14 1 
[3,] 3 6 9 12 15 2 

> v <- apply(M,1,function(x){x[x["Z"]]}) 

> v 
[1] 7 2 6 
> 
Смежные вопросы