Con data.table todo puede ir muy rapido.> require(data.table) > M=matrix(c(5,NA,NA,NA,6,NA,7,NA,8),3,3) > M[,1] [,2] [,3] [1,] 5 NA 7 [2,] NA 6 NA [3,] NA NA 8> M2=data.table(M) > M2V1 V2 V3 1: 5 NA 7 2: NA 6 NA 3: NA NA 8> M3=melt(M2,variable.name = "columna") > M3columna value 1: V1 5 2: V1 NA 3: V1 NA 4: V2 NA 5: V2 6 6: V2 NA 7: V3 7 8: V3 NA 9: V3 8> M3[,.(fila=which(!is.na(value)),value=na.omit(value)),by=columna]columna fila value 1: V1 1 5 2: V2 2 6 3: V3 1 7 4: V3 3 8>Un saludo. Olivier ----- Mensaje original ----- De: "Javier Marcuzzi" <javier.ruben.marcuzzi en gmail.com> Para: "Ruben Bermad" <ruben_bm en hotmail.com>, r-help-es en r-project.org Enviados: Jueves, 11 de Febrero 2016 12:45:02 Asunto: Re: [R-es] Invertir dcast Estimado Ruben Bernard ¿Usted desea algo como sparce matrix? Javier Rubén Marcuzzi De: Ruben Bermad Enviado: jueves, 11 de febrero de 2016 9:40 Para: r-help-es en r-project.org Asunto: [R-es] Invertir dcast Hola a todos, Queria preguntaros si conoceis alguna manera para invertir la funcion dcast. Quiero transformar una matriz en un data frame de tres columnas que indiquen solo los casos donde la combinacion fila-columna sea diferente de NA. Se me habia ocurrido hacer un bucle que fuera seleccionando todos los valores para cada combinacion de fila y columna, pero el problema es que con una matriz de 53000x5000 tarda demasiado, y tengo muchos valores NA que no me sirven de nada. Alguien sabe como podr?a invertir el dcast sin pasar por todas las combinaciones. Muchas gracias por adelantado, Un cordial saludo,Ruben [[alternative HTML version deleted]] [[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
Parece que funciona y va rapido. Solo una duda, es posible poner que en las variables fila y columna ponga los nomrbes que estaban en la matriz? Siguiendo tu codigo, he probado poniendole a M2 los row.names de M: row.names(M2) <- row.names (M) pero no sirve. Si hago row.names (M2) me aparecen los nuevos nombres, pero luego tanto en la visualizacion como en el paso de M3 se ponen los nombres consecutivos. Sabeis alguna manera para poder poner los nombres originales? Muchas gracias !> Date: Thu, 11 Feb 2016 15:08:01 +0100 > From: onunez en unex.es > To: javier.ruben.marcuzzi en gmail.com > CC: ruben_bm en hotmail.com; r-help-es en r-project.org > Subject: Re: [R-es] Invertir dcast > > Con data.table todo puede ir muy rapido. > > require(data.table) > > M=matrix(c(5,NA,NA,NA,6,NA,7,NA,8),3,3) > > M > [,1] [,2] [,3] > [1,] 5 NA 7 > [2,] NA 6 NA > [3,] NA NA 8 > > M2=data.table(M) > > M2 > V1 V2 V3 > 1: 5 NA 7 > 2: NA 6 NA > 3: NA NA 8 > > M3=melt(M2,variable.name = "columna") > > M3 > columna value > 1: V1 5 > 2: V1 NA > 3: V1 NA > 4: V2 NA > 5: V2 6 > 6: V2 NA > 7: V3 7 > 8: V3 NA > 9: V3 8 > > M3[,.(fila=which(!is.na(value)),value=na.omit(value)),by=columna] > columna fila value > 1: V1 1 5 > 2: V2 2 6 > 3: V3 1 7 > 4: V3 3 8 > > > > Un saludo. Olivier > > ----- Mensaje original ----- > De: "Javier Marcuzzi" <javier.ruben.marcuzzi en gmail.com> > Para: "Ruben Bermad" <ruben_bm en hotmail.com>, r-help-es en r-project.org > Enviados: Jueves, 11 de Febrero 2016 12:45:02 > Asunto: Re: [R-es] Invertir dcast > > Estimado Ruben Bernard > > ¿Usted desea algo como sparce matrix? > > Javier Rubén Marcuzzi > > De: Ruben Bermad > Enviado: jueves, 11 de febrero de 2016 9:40 > Para: r-help-es en r-project.org > Asunto: [R-es] Invertir dcast > > Hola a todos, > Queria preguntaros si conoceis alguna manera para invertir la funcion dcast. Quiero transformar una matriz en un data frame de tres columnas que indiquen solo los casos donde la combinacion fila-columna sea diferente de NA. > Se me habia ocurrido hacer un bucle que fuera seleccionando todos los valores para cada combinacion de fila y columna, pero el problema es que con una matriz de 53000x5000 tarda demasiado, y tengo muchos valores NA que no me sirven de nada. > Alguien sabe como podr?a invertir el dcast sin pasar por todas las combinaciones. > Muchas gracias por adelantado, Un cordial saludo,Ruben > > > [[alternative HTML version deleted]] > > > > [[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]]
?Hola, Sí, es que con los data.tables tienes que cambiar los nombres con la función "setnames()" y "M2" es un data.table. Saludos, Carlos Ortega www.qualityexcellence.es ? El 11 de febrero de 2016, 17:26, Ruben Bermad <ruben_bm en hotmail.com> escribió:> > Parece que funciona y va rapido. Solo una duda, es posible poner que en > las variables fila y columna ponga los nomrbes que estaban en la matriz? > Siguiendo tu codigo, he probado poniendole a M2 los row.names de M: > row.names(M2) <- row.names (M) > pero no sirve. > Si hago row.names (M2) me aparecen los nuevos nombres, pero luego tanto en > la visualizacion como en el paso de M3 se ponen los nombres consecutivos. > Sabeis alguna manera para poder poner los nombres originales? > Muchas gracias ! > > Date: Thu, 11 Feb 2016 15:08:01 +0100 > > From: onunez en unex.es > > To: javier.ruben.marcuzzi en gmail.com > > CC: ruben_bm en hotmail.com; r-help-es en r-project.org > > Subject: Re: [R-es] Invertir dcast > > > > Con data.table todo puede ir muy rapido. > > > require(data.table) > > > M=matrix(c(5,NA,NA,NA,6,NA,7,NA,8),3,3) > > > M > > [,1] [,2] [,3] > > [1,] 5 NA 7 > > [2,] NA 6 NA > > [3,] NA NA 8 > > > M2=data.table(M) > > > M2 > > V1 V2 V3 > > 1: 5 NA 7 > > 2: NA 6 NA > > 3: NA NA 8 > > > M3=melt(M2,variable.name = "columna") > > > M3 > > columna value > > 1: V1 5 > > 2: V1 NA > > 3: V1 NA > > 4: V2 NA > > 5: V2 6 > > 6: V2 NA > > 7: V3 7 > > 8: V3 NA > > 9: V3 8 > > > M3[,.(fila=which(!is.na(value)),value=na.omit(value)),by=columna] > > columna fila value > > 1: V1 1 5 > > 2: V2 2 6 > > 3: V3 1 7 > > 4: V3 3 8 > > > > > > > Un saludo. Olivier > > > > ----- Mensaje original ----- > > De: "Javier Marcuzzi" <javier.ruben.marcuzzi en gmail.com> > > Para: "Ruben Bermad" <ruben_bm en hotmail.com>, r-help-es en r-project.org > > Enviados: Jueves, 11 de Febrero 2016 12:45:02 > > Asunto: Re: [R-es] Invertir dcast > > > > Estimado Ruben Bernard > > > > ¿Usted desea algo como sparce matrix? > > > > Javier Rubén Marcuzzi > > > > De: Ruben Bermad > > Enviado: jueves, 11 de febrero de 2016 9:40 > > Para: r-help-es en r-project.org > > Asunto: [R-es] Invertir dcast > > > > Hola a todos, > > Queria preguntaros si conoceis alguna manera para invertir la funcion > dcast. Quiero transformar una matriz en un data frame de tres columnas que > indiquen solo los casos donde la combinacion fila-columna sea diferente de > NA. > > Se me habia ocurrido hacer un bucle que fuera seleccionando todos los > valores para cada combinacion de fila y columna, pero el problema es que > con una matriz de 53000x5000 tarda demasiado, y tengo muchos valores NA que > no me sirven de nada. > > Alguien sabe como podr?a invertir el dcast sin pasar por todas las > combinaciones. > > Muchas gracias por adelantado, Un cordial saludo,Ruben > > > > > > [[alternative HTML version deleted]] > > > > > > > > [[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]]
Muchisimas gracias a todos los que os habeis interesado por mi problema. Vuestras soluciones me han servido de gran ayuda y funcionan perfectamente. Subject: Re: [R-es] Invertir dcast From: luisfo89 en yahoo.com Date: Thu, 11 Feb 2016 18:41:33 +0100 CC: ruben_bm en hotmail.com; r-help-es en r-project.org To: cof en qualityexcellence.es Buenas, Como siempre me gusta ver formas distintas de hacer la misma cosa y, a ser posible, más eficientes.Si he entendido bien, otra forma que veo de hacer lo mismo es la siguiente: usando aritmética modular, la matriz M se puede ver como un vector de columnas concatenadas: M <- matrix(c(5,NA,NA,NA,6,NA,7,NA,8),3,3) linear.indices <- which(!is.na(M)) - 1M3 <- cbind(columna=linear.indices %/% nrow(M) + 1 , fila=linear.indices %% nrow(M) + 1 , valor=M[linear.indices+1]) En caso de que la matriz M sea grande, creo (y corregidme si me equivoco), que esta solución es más rápida y más eficiente en memoria. Además de que no hay que importar ninguna librería extra.En cuanto a poner el mismo nombre, se puede usar colnames(M) e indexarlo con la primera columna de M3. Un saludo,Luisfo El 11 feb 2016, a las 17:30, Carlos Ortega <cof en qualityexcellence.es> escribió:?Hola, Sí, es que con los data.tables tienes que cambiar los nombres con la función "setnames()" y "M2" es un data.table. Saludos, Carlos Ortega www.qualityexcellence.es ? El 11 de febrero de 2016, 17:26, Ruben Bermad <ruben_bm en hotmail.com> escribió: Parece que funciona y va rapido. Solo una duda, es posible poner que en las variables fila y columna ponga los nomrbes que estaban en la matriz? Siguiendo tu codigo, he probado poniendole a M2 los row.names de M: row.names(M2) <- row.names (M) pero no sirve. Si hago row.names (M2) me aparecen los nuevos nombres, pero luego tanto en la visualizacion como en el paso de M3 se ponen los nombres consecutivos. Sabeis alguna manera para poder poner los nombres originales? Muchas gracias ! Date: Thu, 11 Feb 2016 15:08:01 +0100 From: onunez en unex.es To: javier.ruben.marcuzzi en gmail.com CC: ruben_bm en hotmail.com; r-help-es en r-project.org Subject: Re: [R-es] Invertir dcast Con data.table todo puede ir muy rapido. require(data.table) M=matrix(c(5,NA,NA,NA,6,NA,7,NA,8),3,3) M [,1] [,2] [,3] [1,] 5 NA 7 [2,] NA 6 NA [3,] NA NA 8 M2=data.table(M) M2 V1 V2 V3 1: 5 NA 7 2: NA 6 NA 3: NA NA 8 M3=melt(M2,variable.name = "columna") M3 columna value 1: V1 5 2: V1 NA 3: V1 NA 4: V2 NA 5: V2 6 6: V2 NA 7: V3 7 8: V3 NA 9: V3 8 M3[,.(fila=which(!is.na(value)),value=na.omit(value)),by=columna] columna fila value 1: V1 1 5 2: V2 2 6 3: V3 1 7 4: V3 3 8 Un saludo. Olivier ----- Mensaje original ----- De: "Javier Marcuzzi" <javier.ruben.marcuzzi en gmail.com> Para: "Ruben Bermad" <ruben_bm en hotmail.com>, r-help-es en r-project.org Enviados: Jueves, 11 de Febrero 2016 12:45:02 Asunto: Re: [R-es] Invertir dcast Estimado Ruben Bernard ¿Usted desea algo como sparce matrix? Javier Rubén Marcuzzi De: Ruben Bermad Enviado: jueves, 11 de febrero de 2016 9:40 Para: r-help-es en r-project.org Asunto: [R-es] Invertir dcast Hola a todos, Queria preguntaros si conoceis alguna manera para invertir la funcion dcast. Quiero transformar una matriz en un data frame de tres columnas que indiquen solo los casos donde la combinacion fila-columna sea diferente de NA. Se me habia ocurrido hacer un bucle que fuera seleccionando todos los valores para cada combinacion de fila y columna, pero el problema es que con una matriz de 53000x5000 tarda demasiado, y tengo muchos valores NA que no me sirven de nada. Alguien sabe como podr?a invertir el dcast sin pasar por todas las combinaciones. Muchas gracias por adelantado, Un cordial saludo,Ruben [[alternative HTML version deleted]] [[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]] _______________________________________________ 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]]
La propuesta de Luis es desde luego mucho mejor! Mi propuesta tardaba demasidado en reducir la dimensión del problema. Un saludo. Olivier ----- Mensaje original ----- De: "Ruben Bermad" <ruben_bm en hotmail.com> Para: "Luisfo Llador" <luisfo89 en yahoo.com> CC: r-help-es en r-project.org Enviados: Viernes, 12 de Febrero 2016 15:47:41 Asunto: Re: [R-es] Invertir dcast Muchisimas gracias a todos los que os habeis interesado por mi problema. Vuestras soluciones me han servido de gran ayuda y funcionan perfectamente. Subject: Re: [R-es] Invertir dcast From: luisfo89 en yahoo.com Date: Thu, 11 Feb 2016 18:41:33 +0100 CC: ruben_bm en hotmail.com; r-help-es en r-project.org To: cof en qualityexcellence.es Buenas, Como siempre me gusta ver formas distintas de hacer la misma cosa y, a ser posible, más eficientes.Si he entendido bien, otra forma que veo de hacer lo mismo es la siguiente: usando aritmética modular, la matriz M se puede ver como un vector de columnas concatenadas: M <- matrix(c(5,NA,NA,NA,6,NA,7,NA,8),3,3) linear.indices <- which(!is.na(M)) - 1M3 <- cbind(columna=linear.indices %/% nrow(M) + 1 , fila=linear.indices %% nrow(M) + 1 , valor=M[linear.indices+1]) En caso de que la matriz M sea grande, creo (y corregidme si me equivoco), que esta solución es más rápida y más eficiente en memoria. Además de que no hay que importar ninguna librería extra.En cuanto a poner el mismo nombre, se puede usar colnames(M) e indexarlo con la primera columna de M3. Un saludo,Luisfo El 11 feb 2016, a las 17:30, Carlos Ortega <cof en qualityexcellence.es> escribió:?Hola, Sí, es que con los data.tables tienes que cambiar los nombres con la función "setnames()" y "M2" es un data.table. Saludos, Carlos Ortega www.qualityexcellence.es ? El 11 de febrero de 2016, 17:26, Ruben Bermad <ruben_bm en hotmail.com> escribió: Parece que funciona y va rapido. Solo una duda, es posible poner que en las variables fila y columna ponga los nomrbes que estaban en la matriz? Siguiendo tu codigo, he probado poniendole a M2 los row.names de M: row.names(M2) <- row.names (M) pero no sirve. Si hago row.names (M2) me aparecen los nuevos nombres, pero luego tanto en la visualizacion como en el paso de M3 se ponen los nombres consecutivos. Sabeis alguna manera para poder poner los nombres originales? Muchas gracias ! Date: Thu, 11 Feb 2016 15:08:01 +0100 From: onunez en unex.es To: javier.ruben.marcuzzi en gmail.com CC: ruben_bm en hotmail.com; r-help-es en r-project.org Subject: Re: [R-es] Invertir dcast Con data.table todo puede ir muy rapido. require(data.table) M=matrix(c(5,NA,NA,NA,6,NA,7,NA,8),3,3) M [,1] [,2] [,3] [1,] 5 NA 7 [2,] NA 6 NA [3,] NA NA 8 M2=data.table(M) M2 V1 V2 V3 1: 5 NA 7 2: NA 6 NA 3: NA NA 8 M3=melt(M2,variable.name = "columna") M3 columna value 1: V1 5 2: V1 NA 3: V1 NA 4: V2 NA 5: V2 6 6: V2 NA 7: V3 7 8: V3 NA 9: V3 8 M3[,.(fila=which(!is.na(value)),value=na.omit(value)),by=columna] columna fila value 1: V1 1 5 2: V2 2 6 3: V3 1 7 4: V3 3 8 Un saludo. Olivier ----- Mensaje original ----- De: "Javier Marcuzzi" <javier.ruben.marcuzzi en gmail.com> Para: "Ruben Bermad" <ruben_bm en hotmail.com>, r-help-es en r-project.org Enviados: Jueves, 11 de Febrero 2016 12:45:02 Asunto: Re: [R-es] Invertir dcast Estimado Ruben Bernard ¿Usted desea algo como sparce matrix? Javier Rubén Marcuzzi De: Ruben Bermad Enviado: jueves, 11 de febrero de 2016 9:40 Para: r-help-es en r-project.org Asunto: [R-es] Invertir dcast Hola a todos, Queria preguntaros si conoceis alguna manera para invertir la funcion dcast. Quiero transformar una matriz en un data frame de tres columnas que indiquen solo los casos donde la combinacion fila-columna sea diferente de NA. Se me habia ocurrido hacer un bucle que fuera seleccionando todos los valores para cada combinacion de fila y columna, pero el problema es que con una matriz de 53000x5000 tarda demasiado, y tengo muchos valores NA que no me sirven de nada. Alguien sabe como podr?a invertir el dcast sin pasar por todas las combinaciones. Muchas gracias por adelantado, Un cordial saludo,Ruben [[alternative HTML version deleted]] [[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]] _______________________________________________ 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