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
[R-es] Duda sobre construccion de vectores
6 messages · Francisco Rodríguez, Jorge I Velez, Carlos Ortega +1 more
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
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
_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es
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 <fjroar en hotmail.com> escribió:
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]] _______________________________________________ R-help-es mailing list R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Estimado Francisco Hay una forma as.vector, por ejemplo (luego puedes usar como ya le suguieren):
x <-c(1,2,3,4) y <-c(8,9,9,7) z <- data.frame(x,y) z
x y 1 1 8 2 2 9 3 3 9 4 4 7
as.vector(z)
x y 1 1 8 2 2 9 3 3 9 4 4 7
w <- as.vector(z) w[1]
x 1 1 2 2 3 3 4 4
Javier Rubén Marcuzzi De: Carlos Ortega
Ok, muchas gracias, con vuestras soluciones resuelvo el problema, un saludo
To: cof en qualityexcellence.es; fjroar en hotmail.com
CC: r-help-es en r-project.org
From: javier.ruben.marcuzzi en gmail.com
Subject: RE: [R-es] Duda sobre construccion de vectores
Date: Mon, 25 Jul 2016 15:32:45 -0300
Estimado Francisco Hay una forma as.vector, por ejemplo (luego puedes usar como ya le suguieren): > x <-c(1,2,3,4)> y <-c(8,9,9,7)> z <- data.frame(x,y)> z x y1 1 82 2 93 3 94 4 7> as.vector(z) x y1 1 82 2 93 3 94 4 7> w <- as.vector(z)> w[1] x1 12 23 34 4> Javier Rubén Marcuzzi De: Carlos Ortega
Enviado: lunes, 25 de julio de 2016 14:30
Para: Francisco RodrÃguez
CC: r-help-es en r-project.org
Asunto: Re: [R-es] Duda sobre construccion de vectores Hola Francisco, Esta es otra forma, > M[ as.matrix(data.frame(i = 1:length(index), j = index))][1] 4 7 8 Saludos,Carlos Ortegawww.qualityexcellence.es El 25 de julio de 2016, 19:06, Francisco RodrÃguez <fjroar en hotmail.com>escribió: > 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]]> > > _______________________________________________> R-help-es mailing list> R-help-es en r-project.org> https://stat.ethz.ch/mailman/listinfo/r-help-es> -- Saludos,Carlos Ortegawww.qualityexcellence.es [[alternative HTML version deleted]] _______________________________________________R-help-es mailing listR-help-es en r-project.orghttps://stat.ethz.ch/mailman/listinfo/r-help-es