Hola Francisco, Esta es otra forma,
> M[ as.matrix(data.frame(i = 1:length(index), j = index))] [1] 4 7 8 Saludos, Carlos Ortega www.qualityexcellence.es El 25 de julio de 2016, 19:06, Francisco Rodríguez <[email protected]> escribió: > Creo que me puede valer, muchas gracias Jorge, voy a probarlo y te cuento > > From: [email protected] > Date: Mon, 25 Jul 2016 12:05:05 -0500 > Subject: Re: [R-es] Duda sobre construccion de vectores > To: [email protected] > CC: [email protected] > > Buenas tardes, Francisco. > Quizás no sea la manera mas eficiente, pero proporciona el resultado que > buscas: > R> M <- matrix(c(2,3,3,4,5,6,7,7,8,11,10,5), nrow = 3, ncol = 4)R> index > <- c(2,3,3)R> sapply(1:NROW(M), function(.row) M[.row,][index[.row]])[1] 4 > 7 8 > Saludos,Jorge.- > > > > 2016-07-25 11:54 GMT-05:00 Francisco Rodríguez <[email protected]>: > Hola buenas tardes comunidad, seguro que hay algo fácil, pero se me escapa > y es que estoy hoy algo torpe seguramente, a ver me gustaría hacer lo > siguiente: > > Dada una matriz M (que puede ser muy grande), me gustaria crear un vector, > sin usar bucles (ya que cuando es muy grande, todo puede ser muy lento) del > siguiente modo. > > Para cada una de sus filas, me gustaría seleccionar un único elemento de > una columna dada por otro vector, así por ejemplo: > > -Si la matriz de partida es: > > M <- matrix(c(2,3,3,4,5,6,7,7,8,11,10,5), nrow = 3, ncol = 4) > > -Así pues se tiene que: > > M > > [,1] [,2] [,3] [,4][1,] 2 4 7 11[2,] 3 5 7 > 10[3,] 3 6 8 5 > > -Y el vector indicador es: > > Indicador <- c(2,3,3) > > -Me gustaría tener una nuevo vector, cuyos componentes fueran (si el > vector se llamase Resultado) los siguientes: > > Resultado{1} 4 7 8 > > -Es decir sería la segunda componente del primer registro, la tercera > componente del segundo registro y la tercera componente del tercer registro > > -No recuerdo si se digo hace tiempo algo de con la librería data.table, me > da igual tener que usar cualquier librería, pero el tema es tratar de hacer > que sea una operación vectorial que por ejemplo evite un bucle tal como: > > Resultado <- vector("numeric", 3) > > for (i in (1:3)){ > > Resultado[i] = M[i, Indicador[i]]} > > -El cuál, como he comentado sería lento si el número de filas de matriz > fuese muy elevado > > Un saludo y muchas gracias > > [[alternative HTML version deleted]] > > > > > _______________________________________________ > > R-help-es mailing list > > [email protected] > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > [email protected] > https://stat.ethz.ch/mailman/listinfo/r-help-es > -- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list [email protected] https://stat.ethz.ch/mailman/listinfo/r-help-es
