Hola, Otra forma, quizás algo más rápida, especialmente para unos conjuntos tan grandes, que la de sqldf es "data.table": library(data.table) x <- 1:3 y <- 4:6 d <- data.table(x, y) d[,z := paste(x,"-",y,sep="")]> dx y z 1: 1 4 1-4 2: 2 5 2-5 3: 3 6 3-6 Y bueno, "dplyr" también es otra opción muy rápida... También, y recuerdo que hace tiempo también lo llegamos a hablar, existe la posibilidad de juntar las dos variables por fuera ejecutando un comando en la shell del Sistema Operativo (supongo que es Uniux/Linux)con "system()". Saludos, Carlos Ortega www.qualityexcellence.es Saludos, Carlos Ortega El 9 de diciembre de 2014, 14:13, "Marcuzzi, Javier Rubén" < javier.ruben.marcuzzi en gmail.com> escribió:> Mejor > sqldf("select x, y, x || ':' || y || '-ABC' as z from d") > > El 09/12/2014 a las 09:55 a.m., Jorge I Velez escibió: > > Gracias, Javier. > > > > Los datos "d" corresponden un archivo de texto de ~1.92GB. Voy a > > explorar la posibilidad con sqldf, aunque confieso que mi conocimiento > > de SQL es bastante limitado. > > > > Saludos cordiales, > > Jorge.- > > > > > > 2014-12-09 23:50 GMT+11:00 "Marcuzzi, Javier Rubén" > > <javier.ruben.marcuzzi en gmail.com > > <mailto:javier.ruben.marcuzzi en gmail.com>>: > > > > Estimado Jorge Velez > > > > ¿Que pasa si usa sqldf que trabaja con sqlite o alguna conección a > > base de datos y realiza una concateneción en sql? > > > > Javier Marcuzzi > > > > El 09/12/2014 a las 09:46 a.m., Jorge I Velez escibió: > > > > Hola a todos, > > > > Me gustaria construir un vector a partir de otros dos. > > > > Ejemplo: > > > > x <- 1:3 > > y <- 4:6 > > d <- data.frame(x, y) > > d$z <- with(d, paste0(x, ":", y, "-ABC")) > > d > > > > El problema es "d" tiene ~70 millones de filas y toma mucho > tiempo > > construir el vector "z". > > Alguna sugerencia? > > > > Muchas gracias, > > Jorge Velez > > > > [[alternative HTML version deleted]] > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es en r-project.org <mailto:R-help-es en r-project.org> > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es en r-project.org <mailto: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]]
Jorge Creo que la opción de Carlos Ortega es mejor, si no recuerdo mal una vez vi una demostración sobre bigdata en la cual data.table tenía una performance que sorprendía sobre otras alternativas. Javier Marcuzzi El 09/12/2014 a las 12:35 p.m., Carlos Ortega escibió:> Hola, > > Otra forma, quizás algo más rápida, especialmente para unos conjuntos > tan grandes, que la de sqldf es "data.table": > > library(data.table) > x <- 1:3 > y <- 4:6 > d <- data.table(x, y) > d[,z := paste(x,"-",y,sep="")] > > > d > x y z > 1: 1 4 1-4 > 2: 2 5 2-5 > 3: 3 6 3-6 > > Y bueno, "dplyr" también es otra opción muy rápida... > También, y recuerdo que hace tiempo también lo llegamos a hablar, > existe la posibilidad de juntar las dos variables por fuera ejecutando > un comando en la shell del Sistema Operativo (supongo que es > Uniux/Linux)con "system()". > > Saludos, > Carlos Ortega > www.qualityexcellence.es <http://www.qualityexcellence.es> > > Saludos, > Carlos Ortega > > > El 9 de diciembre de 2014, 14:13, "Marcuzzi, Javier Rubén" > <javier.ruben.marcuzzi en gmail.com > <mailto:javier.ruben.marcuzzi en gmail.com>> escribió: > > Mejor > sqldf("select x, y, x || ':' || y || '-ABC' as z from d") > > El 09/12/2014 a las 09:55 a.m., Jorge I Velez escibió: > > Gracias, Javier. > > > > Los datos "d" corresponden un archivo de texto de ~1.92GB. Voy a > > explorar la posibilidad con sqldf, aunque confieso que mi > conocimiento > > de SQL es bastante limitado. > > > > Saludos cordiales, > > Jorge.- > > > > > > 2014-12-09 23:50 GMT+11:00 "Marcuzzi, Javier Rubén" > > <javier.ruben.marcuzzi en gmail.com > <mailto:javier.ruben.marcuzzi en gmail.com> > > <mailto:javier.ruben.marcuzzi en gmail.com > <mailto:javier.ruben.marcuzzi en gmail.com>>>: > > > > Estimado Jorge Velez > > > > ¿Que pasa si usa sqldf que trabaja con sqlite o alguna > conección a > > base de datos y realiza una concateneción en sql? > > > > Javier Marcuzzi > > > > El 09/12/2014 a las 09:46 a.m., Jorge I Velez escibió: > > > > Hola a todos, > > > > Me gustaria construir un vector a partir de otros dos. > > > > Ejemplo: > > > > x <- 1:3 > > y <- 4:6 > > d <- data.frame(x, y) > > d$z <- with(d, paste0(x, ":", y, "-ABC")) > > d > > > > El problema es "d" tiene ~70 millones de filas y toma > mucho tiempo > > construir el vector "z". > > Alguna sugerencia? > > > > Muchas gracias, > > Jorge Velez > > > > [[alternative HTML version deleted]] > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es en r-project.org <mailto:R-help-es en r-project.org> > <mailto:R-help-es en r-project.org <mailto:R-help-es en r-project.org>> > >https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es en r-project.org <mailto:R-help-es en r-project.org> > <mailto:R-help-es en r-project.org <mailto: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 <mailto:R-help-es en r-project.org> > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es <http://www.qualityexcellence.es>[[alternative HTML version deleted]]
Hola, ¿qué tal? Algunos números:> a <- sample(letters, 70e6, replace = T) > b <- sample(letters, 70e6, replace = T)> system.time(a.b <- paste0(a, b))user system elapsed 17.289 0.264 17.552> b <- sample(1:100, 70e6, replace = T) > system.time(a.b <- paste0(a, b))user system elapsed 48.875 0.632 49.506> system.time(a.b <- paste0(a, as.character(b)))user system elapsed 48.255 0.588 48.842 Por debajo del minuto. Pero con 24GB de RAM, que es, diría, el factor limitante. De hecho,> object.size(a.b)560124840 bytes que es alrededor de medio GB. Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El día 9 de diciembre de 2014, 17:12, "Marcuzzi, Javier Rubén" <javier.ruben.marcuzzi en gmail.com> escribió:> Jorge > > Creo que la opción de Carlos Ortega es mejor, si no recuerdo mal una vez > vi una demostración sobre bigdata en la cual data.table tenía una > performance que sorprendía sobre otras alternativas. > > Javier Marcuzzi > > > El 09/12/2014 a las 12:35 p.m., Carlos Ortega escibió: >> Hola, >> >> Otra forma, quizás algo más rápida, especialmente para unos conjuntos >> tan grandes, que la de sqldf es "data.table": >> >> library(data.table) >> x <- 1:3 >> y <- 4:6 >> d <- data.table(x, y) >> d[,z := paste(x,"-",y,sep="")] >> >> > d >> x y z >> 1: 1 4 1-4 >> 2: 2 5 2-5 >> 3: 3 6 3-6 >> >> Y bueno, "dplyr" también es otra opción muy rápida... >> También, y recuerdo que hace tiempo también lo llegamos a hablar, >> existe la posibilidad de juntar las dos variables por fuera ejecutando >> un comando en la shell del Sistema Operativo (supongo que es >> Uniux/Linux)con "system()". >> >> Saludos, >> Carlos Ortega >> www.qualityexcellence.es <http://www.qualityexcellence.es> >> >> Saludos, >> Carlos Ortega >> >> >> El 9 de diciembre de 2014, 14:13, "Marcuzzi, Javier Rubén" >> <javier.ruben.marcuzzi en gmail.com >> <mailto:javier.ruben.marcuzzi en gmail.com>> escribió: >> >> Mejor >> sqldf("select x, y, x || ':' || y || '-ABC' as z from d") >> >> El 09/12/2014 a las 09:55 a.m., Jorge I Velez escibió: >> > Gracias, Javier. >> > >> > Los datos "d" corresponden un archivo de texto de ~1.92GB. Voy a >> > explorar la posibilidad con sqldf, aunque confieso que mi >> conocimiento >> > de SQL es bastante limitado. >> > >> > Saludos cordiales, >> > Jorge.- >> > >> > >> > 2014-12-09 23:50 GMT+11:00 "Marcuzzi, Javier Rubén" >> > <javier.ruben.marcuzzi en gmail.com >> <mailto:javier.ruben.marcuzzi en gmail.com> >> > <mailto:javier.ruben.marcuzzi en gmail.com >> <mailto:javier.ruben.marcuzzi en gmail.com>>>: >> > >> > Estimado Jorge Velez >> > >> > ¿Que pasa si usa sqldf que trabaja con sqlite o alguna >> conección a >> > base de datos y realiza una concateneción en sql? >> > >> > Javier Marcuzzi >> > >> > El 09/12/2014 a las 09:46 a.m., Jorge I Velez escibió: >> > >> > Hola a todos, >> > >> > Me gustaria construir un vector a partir de otros dos. >> > >> > Ejemplo: >> > >> > x <- 1:3 >> > y <- 4:6 >> > d <- data.frame(x, y) >> > d$z <- with(d, paste0(x, ":", y, "-ABC")) >> > d >> > >> > El problema es "d" tiene ~70 millones de filas y toma >> mucho tiempo >> > construir el vector "z". >> > Alguna sugerencia? >> > >> > Muchas gracias, >> > Jorge Velez >> > >> > [[alternative HTML version deleted]] >> > >> > _______________________________________________ >> > R-help-es mailing list >> > R-help-es en r-project.org <mailto:R-help-es en r-project.org> >> <mailto:R-help-es en r-project.org <mailto:R-help-es en r-project.org>> >> >https://stat.ethz.ch/mailman/listinfo/r-help-es >> > >> > >> > _______________________________________________ >> > R-help-es mailing list >> > R-help-es en r-project.org <mailto:R-help-es en r-project.org> >> <mailto:R-help-es en r-project.org <mailto: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 <mailto:R-help-es en r-project.org> >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> >> >> >> -- >> Saludos, >> Carlos Ortega >> www.qualityexcellence.es <http://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
Muchas gracias a todos por las sugerencias. Finalmente reinicie la maquina y pude ejecutar el ejemplo de Carlos Gil en un tiempo "equivalente": R> a <- sample(letters, 70e6, replace = T) R> b <- sample(letters, 70e6, replace = T) R> system.time(a.b <- paste0(a, ":", b, "-SNV")) user system elapsed 23.255 0.150 23.423 R> b <- sample(1:100, 70e6, replace = T) R> system.time(a.b <- paste0(a, ":", b, "-SNV")) user system elapsed 38.226 0.291 38.549 En cuanto a mi "problema", con la ayuda de alguien aqui en la escuela terminamos utilizando JCSMR022175:~ velezjo$ grep -E '\trs\d+\t' input.txt | perl -lne '@a split("\t", $_); $a[3] =~ s/-//g; @b = split(/\//,$a[3]); print "$a[2]\t$a[0]:$a[1]-SNV\t$b[0]\t".join("/", @b[1..$#b]);' > output.txt Saludos cordiales, Jorge.- 2014-12-10 2:35 GMT+11:00 Carlos Ortega <cof en qualityexcellence.es>:> Hola, > > Otra forma, quizás algo más rápida, especialmente para unos conjuntos tan > grandes, que la de sqldf es "data.table": > > library(data.table) > x <- 1:3 > y <- 4:6 > d <- data.table(x, y) > d[,z := paste(x,"-",y,sep="")] > > > d > x y z > 1: 1 4 1-4 > 2: 2 5 2-5 > 3: 3 6 3-6 > > Y bueno, "dplyr" también es otra opción muy rápida... > También, y recuerdo que hace tiempo también lo llegamos a hablar, existe > la posibilidad de juntar las dos variables por fuera ejecutando un comando > en la shell del Sistema Operativo (supongo que es Uniux/Linux)con > "system()". > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > Saludos, > Carlos Ortega > > > El 9 de diciembre de 2014, 14:13, "Marcuzzi, Javier Rubén" < > javier.ruben.marcuzzi en gmail.com> escribió: > >> Mejor >> sqldf("select x, y, x || ':' || y || '-ABC' as z from d") >> >> El 09/12/2014 a las 09:55 a.m., Jorge I Velez escibió: >> > Gracias, Javier. >> > >> > Los datos "d" corresponden un archivo de texto de ~1.92GB. Voy a >> > explorar la posibilidad con sqldf, aunque confieso que mi conocimiento >> > de SQL es bastante limitado. >> > >> > Saludos cordiales, >> > Jorge.- >> > >> > >> > 2014-12-09 23:50 GMT+11:00 "Marcuzzi, Javier Rubén" >> > <javier.ruben.marcuzzi en gmail.com >> > <mailto:javier.ruben.marcuzzi en gmail.com>>: >> > >> > Estimado Jorge Velez >> > >> > ¿Que pasa si usa sqldf que trabaja con sqlite o alguna conección a >> > base de datos y realiza una concateneción en sql? >> > >> > Javier Marcuzzi >> > >> > El 09/12/2014 a las 09:46 a.m., Jorge I Velez escibió: >> > >> > Hola a todos, >> > >> > Me gustaria construir un vector a partir de otros dos. >> > >> > Ejemplo: >> > >> > x <- 1:3 >> > y <- 4:6 >> > d <- data.frame(x, y) >> > d$z <- with(d, paste0(x, ":", y, "-ABC")) >> > d >> > >> > El problema es "d" tiene ~70 millones de filas y toma mucho >> tiempo >> > construir el vector "z". >> > Alguna sugerencia? >> > >> > Muchas gracias, >> > Jorge Velez >> > >> > [[alternative HTML version deleted]] >> > >> > _______________________________________________ >> > R-help-es mailing list >> > R-help-es en r-project.org <mailto:R-help-es en r-project.org> >> > https://stat.ethz.ch/mailman/listinfo/r-help-es >> > >> > >> > _______________________________________________ >> > R-help-es mailing list >> > R-help-es en r-project.org <mailto: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]]