Sebastian Kruk
2012-Nov-22 13:01 UTC
[R-es] col de data.frame de chr a int cambiando comas por puntos
Estimados usuarios de R: Tengo un archivo de Access que lo cargo usando la libreria RODBC: CanalVentas <- odbcConnectAccess("Ventas") Me lo cargo en un data frame: Ventas <- sqlQuery( CanalVentas, "select * from VentasFin", as.is=T) Me queda un data frame donde todas las columnas son de clase character, algunas que tendrían que ser numeric no quedan asi pues a veces tienen como separador decimal el punto y otras veces la coma. En los casos que tengo punto y tambien coma puedo resolver la situación usando: for (i in 3:15) Ventas[,i] <- as.numeric(gsub("\\.","",ventas[,i])) Lo que quise hacer usando apply pero dejaba de ser un data frame ¿Se puede hacer con apply? Saludos, Sebastián. El data frame que me queda al ap [[alternative HTML version deleted]]
Isidro Hidalgo
2012-Nov-22 13:14 UTC
[R-es] col de data.frame de chr a int cambiando comas por puntos
Es que la salida de "apply" es una lista. Puedes probar con "as.data.frame(sapply())", a ver si das con ello... Un saludo. Isidro Hidalgo Arellano Observatorio Regional de Empleo Consejería de Empleo y Economía ihidalgo en jccm.es http://www.jccm.es> -----Mensaje original----- > De: r-help-es-bounces en r-project.org [mailto:r-help-es-bounces en r- > project.org] En nombre de Sebastian Kruk > Enviado el: jueves, 22 de noviembre de 2012 14:01 > Para: r-help-es en r-project.org > Asunto: [R-es] col de data.frame de chr a int cambiando comas por > puntos > > Estimados usuarios de R: > > Tengo un archivo de Access que lo cargo usando la libreria RODBC: > > CanalVentas <- odbcConnectAccess("Ventas") Me lo cargo en un data > frame: > > Ventas <- sqlQuery( CanalVentas, "select * from VentasFin", as.is=T) > > Me queda un data frame donde todas las columnas son de clase character, > algunas que tendrían que ser numeric no quedan asi pues a veces tienen > como separador decimal el punto y otras veces la coma. > > En los casos que tengo punto y tambien coma puedo resolver la situación > usando: > > for (i in 3:15) Ventas[,i] <- as.numeric(gsub("\\.","",ventas[,i])) > > Lo que quise hacer usando apply pero dejaba de ser un data frame > > ¿Se puede hacer con apply? > > Saludos, > > Sebastián. > > > > > > El data frame que me queda al ap > > [[alternative HTML version deleted]]
Carlos Ortega
2012-Nov-22 13:25 UTC
[R-es] col de data.frame de chr a int cambiando comas por puntos
Hola, Creo que hace falta que hagas el bucle, ni que uses un apply. Puedes seguir manteniendo el mismo data.frame, tanto para la sustitución, como para la conversión a numeric de las columnas afectadas. Las dos funciones permiten trabajar sobre todo el data.frame de un tirón. Mira si así funciona: Ventas <- gsub("\\.","", Ventas) Ventas <- as.numeric(Ventas[, c(3:15)] Saludos, Carlos Oortega www.qualityexcellence.es El 22 de noviembre de 2012 14:01, Sebastian Kruk <residuo.solow@gmail.com>escribió:> Estimados usuarios de R: > > Tengo un archivo de Access que lo cargo usando la libreria RODBC: > > CanalVentas <- odbcConnectAccess("Ventas") > Me lo cargo en un data frame: > > Ventas <- sqlQuery( CanalVentas, "select * from VentasFin", as.is=T) > > Me queda un data frame donde todas las columnas son de clase character, > algunas que tendrían que ser numeric no quedan asi pues a veces tienen como > separador decimal el punto y otras veces la coma. > > En los casos que tengo punto y tambien coma puedo resolver la situación > usando: > > for (i in 3:15) Ventas[,i] <- as.numeric(gsub("\\.","",ventas[,i])) > > Lo que quise hacer usando apply pero dejaba de ser un data frame > > ¿Se puede hacer con apply? > > Saludos, > > Sebastián. > > > > > > El data frame que me queda al ap > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Carlos Ortega
2012-Nov-22 13:26 UTC
[R-es] col de data.frame de chr a int cambiando comas por puntos
Perdon, Donde puse "Creo que hace falta que hagas el bucle, ni que uses un apply." Quise decir "Creo que **no** hace falta que hagas el bucle, ni que uses un apply." Saludos, Carlos Ortega www.qualityexcellence.es El 22 de noviembre de 2012 14:25, Carlos Ortega <cof@qualityexcellence.es>escribió:> Hola, > > Creo que hace falta que hagas el bucle, ni que uses un apply. > Puedes seguir manteniendo el mismo data.frame, tanto para la sustitución, > como para la conversión a numeric de las columnas afectadas. Las dos > funciones permiten trabajar sobre todo el data.frame de un tirón. > > Mira si así funciona: > > Ventas <- gsub("\\.","", Ventas) > Ventas <- as.numeric(Ventas[, c(3:15)] > > > Saludos, > Carlos Oortega > www.qualityexcellence.es > > El 22 de noviembre de 2012 14:01, Sebastian Kruk <residuo.solow@gmail.com>escribió: > >> Estimados usuarios de R: >> >> Tengo un archivo de Access que lo cargo usando la libreria RODBC: >> >> CanalVentas <- odbcConnectAccess("Ventas") >> Me lo cargo en un data frame: >> >> Ventas <- sqlQuery( CanalVentas, "select * from VentasFin", as.is=T) >> >> Me queda un data frame donde todas las columnas son de clase character, >> algunas que tendrían que ser numeric no quedan asi pues a veces tienen >> como >> separador decimal el punto y otras veces la coma. >> >> En los casos que tengo punto y tambien coma puedo resolver la situación >> usando: >> >> for (i in 3:15) Ventas[,i] <- as.numeric(gsub("\\.","",ventas[,i])) >> >> Lo que quise hacer usando apply pero dejaba de ser un data frame >> >> ¿Se puede hacer con apply? >> >> Saludos, >> >> Sebastián. >> >> >> >> >> >> El data frame que me queda al ap >> >> [[alternative HTML version deleted]] >> >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Sebastian Kruk
2012-Nov-22 13:43 UTC
[R-es] col de data.frame de chr a int cambiando comas por puntos
Me parece que es menos complicado seguir con el for. Saludos, Sebastián. El 22 de noviembre de 2012 10:14, Isidro Hidalgo <ihidalgo@jccm.es>escribió:> Es que la salida de "apply" es una lista. Puedes probar con > "as.data.frame(sapply())", a ver si das con ello... > Un saludo. > > Isidro Hidalgo Arellano > Observatorio Regional de Empleo > Consejería de Empleo y Economía > ihidalgo@jccm.es > http://www.jccm.es > > > > > > -----Mensaje original----- > > De: r-help-es-bounces@r-project.org [mailto:r-help-es-bounces@r- > > project.org] En nombre de Sebastian Kruk > > Enviado el: jueves, 22 de noviembre de 2012 14:01 > > Para: r-help-es@r-project.org > > Asunto: [R-es] col de data.frame de chr a int cambiando comas por > > puntos > > > > Estimados usuarios de R: > > > > Tengo un archivo de Access que lo cargo usando la libreria RODBC: > > > > CanalVentas <- odbcConnectAccess("Ventas") Me lo cargo en un data > > frame: > > > > Ventas <- sqlQuery( CanalVentas, "select * from VentasFin", as.is=T) > > > > Me queda un data frame donde todas las columnas son de clase character, > > algunas que tendrían que ser numeric no quedan asi pues a veces tienen > > como separador decimal el punto y otras veces la coma. > > > > En los casos que tengo punto y tambien coma puedo resolver la situación > > usando: > > > > for (i in 3:15) Ventas[,i] <- as.numeric(gsub("\\.","",ventas[,i])) > > > > Lo que quise hacer usando apply pero dejaba de ser un data frame > > > > ¿Se puede hacer con apply? > > > > Saludos, > > > > Sebastián. > > > > > > > > > > > > El data frame que me queda al ap > > > > [[alternative HTML version deleted]] > > > >[[alternative HTML version deleted]]
Sebastian Kruk
2012-Nov-22 13:46 UTC
[R-es] col de data.frame de chr a int cambiando comas por puntos
Carlos, cuando aplico la primera sentencia, Ventas <- gsub("\\.","", Ventas), el data frame se pierde, queda convertido en character. Me da el siguiente aviso: Mensajes de aviso perdidos In edit.default(CapturadosChicas) : deparse may be not be source()able in R < 2.7.0 Saludos, Sebastián. El 22 de noviembre de 2012 10:25, Carlos Ortega <cof@qualityexcellence.es>escribió:> Hola, > > Creo que hace falta que hagas el bucle, ni que uses un apply. > Puedes seguir manteniendo el mismo data.frame, tanto para la sustitución, > como para la conversión a numeric de las columnas afectadas. Las dos > funciones permiten trabajar sobre todo el data.frame de un tirón. > > Mira si así funciona: > > Ventas <- gsub("\\.","", Ventas) > Ventas <- as.numeric(Ventas[, c(3:15)] > > > Saludos, > Carlos Oortega > www.qualityexcellence.es > > El 22 de noviembre de 2012 14:01, Sebastian Kruk <residuo.solow@gmail.com>escribió: > >> Estimados usuarios de R: >> >> Tengo un archivo de Access que lo cargo usando la libreria RODBC: >> >> CanalVentas <- odbcConnectAccess("Ventas") >> Me lo cargo en un data frame: >> >> Ventas <- sqlQuery( CanalVentas, "select * from VentasFin", as.is=T) >> >> Me queda un data frame donde todas las columnas son de clase character, >> algunas que tendrían que ser numeric no quedan asi pues a veces tienen >> como >> separador decimal el punto y otras veces la coma. >> >> En los casos que tengo punto y tambien coma puedo resolver la situación >> usando: >> >> for (i in 3:15) Ventas[,i] <- as.numeric(gsub("\\.","",ventas[,i])) >> >> Lo que quise hacer usando apply pero dejaba de ser un data frame >> >> ¿Se puede hacer con apply? >> >> Saludos, >> >> Sebastián. >> >> >> >> >> >> El data frame que me queda al ap >> >> [[alternative HTML version deleted]] >> >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es >[[alternative HTML version deleted]]
Carlos Ortega
2012-Nov-22 13:52 UTC
[R-es] col de data.frame de chr a int cambiando comas por puntos
Hola, ¿ Puedes enviar una parte del data.frame "Ventas" para reproducirlo? Gracias, Carlos Ortega www.qualityexcellence.es El 22 de noviembre de 2012 14:46, Sebastian Kruk <residuo.solow@gmail.com>escribió:> Carlos, cuando aplico la primera sentencia, Ventas <- gsub("\\.","", > Ventas), el data frame se pierde, queda convertido en character. > > Me da el siguiente aviso: > > Mensajes de aviso perdidos > In edit.default(CapturadosChicas) : > deparse may be not be source()able in R < 2.7.0 > > Saludos, > > Sebastián. > > > > El 22 de noviembre de 2012 10:25, Carlos Ortega <cof@qualityexcellence.es>escribió: > > Hola, >> >> Creo que hace falta que hagas el bucle, ni que uses un apply. >> Puedes seguir manteniendo el mismo data.frame, tanto para la sustitución, >> como para la conversión a numeric de las columnas afectadas. Las dos >> funciones permiten trabajar sobre todo el data.frame de un tirón. >> >> Mira si así funciona: >> >> Ventas <- gsub("\\.","", Ventas) >> Ventas <- as.numeric(Ventas[, c(3:15)] >> >> >> Saludos, >> Carlos Oortega >> www.qualityexcellence.es >> >> El 22 de noviembre de 2012 14:01, Sebastian Kruk <residuo.solow@gmail.com >> > escribió: >> >>> Estimados usuarios de R: >>> >>> Tengo un archivo de Access que lo cargo usando la libreria RODBC: >>> >>> CanalVentas <- odbcConnectAccess("Ventas") >>> Me lo cargo en un data frame: >>> >>> Ventas <- sqlQuery( CanalVentas, "select * from VentasFin", as.is=T) >>> >>> Me queda un data frame donde todas las columnas son de clase character, >>> algunas que tendrían que ser numeric no quedan asi pues a veces tienen >>> como >>> separador decimal el punto y otras veces la coma. >>> >>> En los casos que tengo punto y tambien coma puedo resolver la situación >>> usando: >>> >>> for (i in 3:15) Ventas[,i] <- as.numeric(gsub("\\.","",ventas[,i])) >>> >>> Lo que quise hacer usando apply pero dejaba de ser un data frame >>> >>> ¿Se puede hacer con apply? >>> >>> Saludos, >>> >>> Sebastián. >>> >>> >>> >>> >>> >>> El data frame que me queda al ap >>> >>> [[alternative HTML version deleted]] >>> >>> >>> _______________________________________________ >>> R-help-es mailing list >>> R-help-es@r-project.org >>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>> >>> >> >> >> -- >> Saludos, >> Carlos Ortega >> www.qualityexcellence.es >> > >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Marcuzzi, Javier Rubén
2012-Nov-22 15:09 UTC
[R-es] col de data.frame de chr a int cambiando comas por puntos
Estimado Sebastián Kruk ¿Usted tiene el access? Le pregunto porque yo cuándo busque datos en access, no use RODBC, utilizaba las opciones de exportación de access, las que posibilitan colocar, comas, punto y comas, comillas, etc., el resultado es guardado como *.txt (csv) e importado en R, luego as.numeric(dataframe$columna) ... Con pocos datos esa forma a mi me resulta práctica y rápida, claro que en otras oportunidades es beneficioso realizar la consulta directamente a la base de datos. Javier Marcuzzi -----Mensaje original----- From: Sebastian Kruk Sent: Thursday, November 22, 2012 10:01 AM To: r-help-es en r-project.org Subject: [R-es] col de data.frame de chr a int cambiando comas por puntos Estimados usuarios de R: Tengo un archivo de Access que lo cargo usando la libreria RODBC: CanalVentas <- odbcConnectAccess("Ventas") Me lo cargo en un data frame: Ventas <- sqlQuery( CanalVentas, "select * from VentasFin", as.is=T) Me queda un data frame donde todas las columnas son de clase character, algunas que tendrían que ser numeric no quedan asi pues a veces tienen como separador decimal el punto y otras veces la coma. En los casos que tengo punto y tambien coma puedo resolver la situación usando: for (i in 3:15) Ventas[,i] <- as.numeric(gsub("\\.","",ventas[,i])) Lo que quise hacer usando apply pero dejaba de ser un data frame ¿Se puede hacer con apply? Saludos, Sebastián. El data frame que me queda al ap [[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
Sebastian Kruk
2012-Nov-22 18:29 UTC
[R-es] col de data.frame de chr a int cambiando comas por puntos
Estimado Javier Marcuzzi: En verdad a mi me pasan el archivo .mdb. El problema es que en una columna por ejemplo el valor 8,6 lo ponen como 8,6 y en otro caso 8.6 por lo cual tendría que buscar linea por línea donde usaron coma en lugar de punto. Saludos, Sebastián Kruk El 22 de noviembre de 2012 12:09, Marcuzzi, Javier Rubén < javier.ruben.marcuzzi@gmail.com> escribió:> Estimado Sebastián Kruk > > ¿Usted tiene el access? Le pregunto porque yo cuándo busque datos en > access, no use RODBC, utilizaba las opciones de exportación de access, las > que posibilitan colocar, comas, punto y comas, comillas, etc., el resultado > es guardado como *.txt (csv) e importado en R, luego > as.numeric(dataframe$columna) ... > > Con pocos datos esa forma a mi me resulta práctica y rápida, claro que en > otras oportunidades es beneficioso realizar la consulta directamente a la > base de datos. > > Javier Marcuzzi > > > -----Mensaje original----- From: Sebastian Kruk > Sent: Thursday, November 22, 2012 10:01 AM > To: r-help-es@r-project.org > Subject: [R-es] col de data.frame de chr a int cambiando comas por puntos > > > Estimados usuarios de R: > > Tengo un archivo de Access que lo cargo usando la libreria RODBC: > > CanalVentas <- odbcConnectAccess("Ventas") > Me lo cargo en un data frame: > > Ventas <- sqlQuery( CanalVentas, "select * from VentasFin", as.is=T) > > Me queda un data frame donde todas las columnas son de clase character, > algunas que tendrían que ser numeric no quedan asi pues a veces tienen como > separador decimal el punto y otras veces la coma. > > En los casos que tengo punto y tambien coma puedo resolver la situación > usando: > > for (i in 3:15) Ventas[,i] <- as.numeric(gsub("\\.","",**ventas[,i])) > > Lo que quise hacer usando apply pero dejaba de ser un data frame > > ¿Se puede hacer con apply? > > Saludos, > > Sebastián. > > > > > > El data frame que me queda al ap > > [[alternative HTML version deleted]] > > > > > > > > ______________________________**_________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/**listinfo/r-help-es<https://stat.ethz.ch/mailman/listinfo/r-help-es> >[[alternative HTML version deleted]]
Sebastian Kruk
2012-Nov-22 18:37 UTC
[R-es] col de data.frame de chr a int cambiando comas por puntos
Hola Carlos, para el ejemplo que pusiste anda bien. En mi caso en la primera fila en vez de tener: -0,021 0,03 -0,001 0,025 tendría: -0.021 0,03 -0,001 0.025 Saludos, Sebastián. El 22 de noviembre de 2012 13:45, Carlos Ortega <cof@qualityexcellence.es>escribió:> Hola Sebastian, > > No he podido resolverlo sin el bucle, el scope de gsub es sobre vectores, > como as.numerc. > Te adjunto lo que he hecho que funciona con este ejemplo simulado: > > ########################################## > > > Lines <- "comb mu B.int M.int B.win M.win > 1 1 -0,021 0,03 -0,001 0,025 > 1 1 -0,025 0,03 -0,001 0,025 > 1 1 -0,022 0,03 -0,001 0,025 > 1 1 -0,05 0,033 0,002 0,026 > 2 10 -0,001 0,003 0,001 0,002 > 2 10 -0,002 0,003 0,001 0,002 > 2 10 -0,001 0,003 0,001 0,002 > 2 10 -0,002 0,003 0,001 0,002 > " > > t.con<-textConnection(Lines) > dat.in<-read.table(t.con, header=T, as.is=T) > close(t.con) > > dat.reduced <- dat.in[,c(3:6)] > > for(i in 1:4) { > > val.tmp <- gsub("(\\d),(\\d)", "\\1.\\2", dat.reduced[, i], perl=TRUE) > dat.reduced[,i] <- as.numeric(val.tmp) > > } > > ########################################## > > > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > El 22 de noviembre de 2012 14:01, Sebastian Kruk <residuo.solow@gmail.com>escribió: > >> Estimados usuarios de R: >> >> Tengo un archivo de Access que lo cargo usando la libreria RODBC: >> >> CanalVentas <- odbcConnectAccess("Ventas") >> Me lo cargo en un data frame: >> >> Ventas <- sqlQuery( CanalVentas, "select * from VentasFin", as.is=T) >> >> Me queda un data frame donde todas las columnas son de clase character, >> algunas que tendrían que ser numeric no quedan asi pues a veces tienen >> como >> separador decimal el punto y otras veces la coma. >> >> En los casos que tengo punto y tambien coma puedo resolver la situación >> usando: >> >> for (i in 3:15) Ventas[,i] <- as.numeric(gsub("\\.","",ventas[,i])) >> >> Lo que quise hacer usando apply pero dejaba de ser un data frame >> >> ¿Se puede hacer con apply? >> >> Saludos, >> >> Sebastián. >> >> >> >> >> >> El data frame que me queda al ap >> >> [[alternative HTML version deleted]] >> >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es >[[alternative HTML version deleted]]
Marcuzzi, Javier Rubén
2012-Nov-22 18:59 UTC
[R-es] col de data.frame de chr a int cambiando comas por puntos
Estimado Sebastián Cuándo los datos están mal almacenados es un rompedero de cabezas, en algunos casos se puede acomodar y en otros es imposible, sobre todo si son miles de datos. ¿Puedes exportarlos a un archivo *.txt? Mi razonamiento es el siguiente, por ejemplo se exportan en algo como 345;345;5.6;5,6 La separación es ; y los , y . están para indicar decimales, si usted tiene suerte en eso desde cualquier editor de texto coloca buscar y reemplazar ... (o desde R con algo de código). Si es complicado, desde R exporte o guarde el data.frame a un archivo de *.txt y busque en la secuencia de texto donde se separan los campos de información (; por ejemplo) y reemplace las (, o .) En R se puede, pero por ahí es más fácil que R realice los cálculos y el trabajo de texto (datos en texto) cualquier procesador de texto. Cuándo el problema esté correctamente identificado se puede programar algo en R para automatizar el proceso. Javier Marcuzzi From: Sebastian Kruk Sent: Thursday, November 22, 2012 3:29 PM To: Marcuzzi, Javier Rubén Cc: r-help-es@r-project.org Subject: Re: [R-es] col de data.frame de chr a int cambiando comas por puntos Estimado Javier Marcuzzi: En verdad a mi me pasan el archivo .mdb. El problema es que en una columna por ejemplo el valor 8,6 lo ponen como 8,6 y en otro caso 8.6 por lo cual tendría que buscar linea por línea donde usaron coma en lugar de punto. Saludos, Sebastián Kruk El 22 de noviembre de 2012 12:09, Marcuzzi, Javier Rubén <javier.ruben.marcuzzi@gmail.com> escribió: Estimado Sebastián Kruk ¿Usted tiene el access? Le pregunto porque yo cuándo busque datos en access, no use RODBC, utilizaba las opciones de exportación de access, las que posibilitan colocar, comas, punto y comas, comillas, etc., el resultado es guardado como *.txt (csv) e importado en R, luego as.numeric(dataframe$columna) ... Con pocos datos esa forma a mi me resulta práctica y rápida, claro que en otras oportunidades es beneficioso realizar la consulta directamente a la base de datos. Javier Marcuzzi -----Mensaje original----- From: Sebastian Kruk Sent: Thursday, November 22, 2012 10:01 AM To: r-help-es@r-project.org Subject: [R-es] col de data.frame de chr a int cambiando comas por puntos Estimados usuarios de R: Tengo un archivo de Access que lo cargo usando la libreria RODBC: CanalVentas <- odbcConnectAccess("Ventas") Me lo cargo en un data frame: Ventas <- sqlQuery( CanalVentas, "select * from VentasFin", as.is=T) Me queda un data frame donde todas las columnas son de clase character, algunas que tendrían que ser numeric no quedan asi pues a veces tienen como separador decimal el punto y otras veces la coma. En los casos que tengo punto y tambien coma puedo resolver la situación usando: for (i in 3:15) Ventas[,i] <- as.numeric(gsub("\\.","",ventas[,i])) Lo que quise hacer usando apply pero dejaba de ser un data frame ¿Se puede hacer con apply? Saludos, Sebastián. El data frame que me queda al ap [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]]
Carlos Ortega
2012-Nov-22 19:00 UTC
[R-es] col de data.frame de chr a int cambiando comas por puntos
Hola, Ya, pero cuando utilizas gsub() cambia solamente los elementos que tienen comas (",") los demás los deja igual (esto es con "."). Por tanto el script tiene que funcionar igualmente. Saludos, Carlos Ortega www.qualityexcellence.es El 22 de noviembre de 2012 19:37, Sebastian Kruk <residuo.solow@gmail.com>escribió:> Hola Carlos, para el ejemplo que pusiste anda bien. > > En mi caso en la primera fila en vez de tener: > > -0,021 0,03 -0,001 0,025 > > tendría: > > -0.021 0,03 -0,001 0.025 > > Saludos, > > Sebastián. > > > El 22 de noviembre de 2012 13:45, Carlos Ortega <cof@qualityexcellence.es>escribió: > > Hola Sebastian, >> >> No he podido resolverlo sin el bucle, el scope de gsub es sobre vectores, >> como as.numerc. >> Te adjunto lo que he hecho que funciona con este ejemplo simulado: >> >> ########################################## >> >> >> Lines <- "comb mu B.int M.int B.win M.win >> 1 1 -0,021 0,03 -0,001 0,025 >> 1 1 -0,025 0,03 -0,001 0,025 >> 1 1 -0,022 0,03 -0,001 0,025 >> 1 1 -0,05 0,033 0,002 0,026 >> 2 10 -0,001 0,003 0,001 0,002 >> 2 10 -0,002 0,003 0,001 0,002 >> 2 10 -0,001 0,003 0,001 0,002 >> 2 10 -0,002 0,003 0,001 0,002 >> " >> >> t.con<-textConnection(Lines) >> dat.in<-read.table(t.con, header=T, as.is=T) >> close(t.con) >> >> dat.reduced <- dat.in[,c(3:6)] >> >> for(i in 1:4) { >> >> val.tmp <- gsub("(\\d),(\\d)", "\\1.\\2", dat.reduced[, i], perl=TRUE) >> dat.reduced[,i] <- as.numeric(val.tmp) >> >> } >> >> ########################################## >> >> >> >> Saludos, >> Carlos Ortega >> www.qualityexcellence.es >> >> El 22 de noviembre de 2012 14:01, Sebastian Kruk <residuo.solow@gmail.com >> > escribió: >> >>> Estimados usuarios de R: >>> >>> Tengo un archivo de Access que lo cargo usando la libreria RODBC: >>> >>> CanalVentas <- odbcConnectAccess("Ventas") >>> Me lo cargo en un data frame: >>> >>> Ventas <- sqlQuery( CanalVentas, "select * from VentasFin", as.is=T) >>> >>> Me queda un data frame donde todas las columnas son de clase character, >>> algunas que tendrían que ser numeric no quedan asi pues a veces tienen >>> como >>> separador decimal el punto y otras veces la coma. >>> >>> En los casos que tengo punto y tambien coma puedo resolver la situación >>> usando: >>> >>> for (i in 3:15) Ventas[,i] <- as.numeric(gsub("\\.","",ventas[,i])) >>> >>> Lo que quise hacer usando apply pero dejaba de ser un data frame >>> >>> ¿Se puede hacer con apply? >>> >>> Saludos, >>> >>> Sebastián. >>> >>> >>> >>> >>> >>> El data frame que me queda al ap >>> >>> [[alternative HTML version deleted]] >>> >>> >>> _______________________________________________ >>> R-help-es mailing list >>> R-help-es@r-project.org >>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>> >>> >> >> >> -- >> Saludos, >> Carlos Ortega >> www.qualityexcellence.es >> > >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
daniel
2012-Nov-22 20:05 UTC
[R-es] col de data.frame de chr a int cambiando comas por puntos
Sebastian, Por lo que entiendo puedes importar los datos a R. Si envías una muestra [digamos head(nombredeladataframe, 10)] podremos ver cual es el problema con gsub, que me parece la forma adecuada para encontrar una solución. Para enviar el ejemplo esta guía es muy buena: http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example Daniel Merino El día 22 de noviembre de 2012 15:59, Marcuzzi, Javier Rubén <javier.ruben.marcuzzi en gmail.com> escribió:> Estimado Sebastián > > Cuándo los datos están mal almacenados es un rompedero de cabezas, en algunos casos se puede acomodar y en otros es imposible, sobre todo si son miles de datos. ¿Puedes exportarlos a un archivo *.txt? > Mi razonamiento es el siguiente, por ejemplo se exportan en algo como 345;345;5.6;5,6 > La separación es ; y los , y . están para indicar decimales, si usted tiene suerte en eso desde cualquier editor de texto coloca buscar y reemplazar ... (o desde R con algo de código). > > Si es complicado, desde R exporte o guarde el data.frame a un archivo de *.txt y busque en la secuencia de texto donde se separan los campos de información (; por ejemplo) y reemplace las (, o .) > > En R se puede, pero por ahí es más fácil que R realice los cálculos y el trabajo de texto (datos en texto) cualquier procesador de texto. Cuándo el problema esté correctamente identificado se puede programar algo en R para automatizar el proceso. > > Javier Marcuzzi > > From: Sebastian Kruk > Sent: Thursday, November 22, 2012 3:29 PM > To: Marcuzzi, Javier Rubén > Cc: r-help-es en r-project.org > Subject: Re: [R-es] col de data.frame de chr a int cambiando comas por puntos > > Estimado Javier Marcuzzi: > > En verdad a mi me pasan el archivo .mdb. > > El problema es que en una columna por ejemplo el valor 8,6 lo ponen como 8,6 y en otro caso 8.6 por lo cual tendría que buscar linea por línea donde usaron coma en lugar de punto. > > Saludos, > > Sebastián Kruk > > > > El 22 de noviembre de 2012 12:09, Marcuzzi, Javier Rubén <javier.ruben.marcuzzi en gmail.com> escribió: > > Estimado Sebastián Kruk > > ¿Usted tiene el access? Le pregunto porque yo cuándo busque datos en access, no use RODBC, utilizaba las opciones de exportación de access, las que posibilitan colocar, comas, punto y comas, comillas, etc., el resultado es guardado como *.txt (csv) e importado en R, luego as.numeric(dataframe$columna) ... > > Con pocos datos esa forma a mi me resulta práctica y rápida, claro que en otras oportunidades es beneficioso realizar la consulta directamente a la base de datos. > > Javier Marcuzzi > > > -----Mensaje original----- From: Sebastian Kruk > Sent: Thursday, November 22, 2012 10:01 AM > To: r-help-es en r-project.org > Subject: [R-es] col de data.frame de chr a int cambiando comas por puntos > > > Estimados usuarios de R: > > Tengo un archivo de Access que lo cargo usando la libreria RODBC: > > CanalVentas <- odbcConnectAccess("Ventas") > Me lo cargo en un data frame: > > Ventas <- sqlQuery( CanalVentas, "select * from VentasFin", as.is=T) > > Me queda un data frame donde todas las columnas son de clase character, > algunas que tendrían que ser numeric no quedan asi pues a veces tienen como > separador decimal el punto y otras veces la coma. > > En los casos que tengo punto y tambien coma puedo resolver la situación > usando: > > for (i in 3:15) Ventas[,i] <- as.numeric(gsub("\\.","",ventas[,i])) > > Lo que quise hacer usando apply pero dejaba de ser un data frame > > ¿Se puede hacer con apply? > > Saludos, > > Sebastián. > > > > > > El data frame que me queda al ap > > > [[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 >-- Daniel