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]]
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 <fjroar en hotmail.com>:> 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 > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]
Creo que me puede valer, muchas gracias Jorge, voy a probarlo y te cuento From: jorgeivanvelez en gmail.com Date: Mon, 25 Jul 2016 12:05:05 -0500 Subject: Re: [R-es] Duda sobre construccion de vectores To: fjroar en hotmail.com CC: r-help-es en r-project.org 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 <fjroar en hotmail.com>: 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 R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]]
Apparently Analagous Threads
- Duda sobre construccion de vectores
- duda con lmer. Añadir predictor a nivel de grupos
- Intervalos de variable de proporciones, para representar en mapa
- DUDA LLENAR MATRIZ CREADA
- (*Videos Disponibles*) ... Hoy reunión del "Grupo de Usuarios de R de Madrid"....