Sebastian Kruk
2013-Dec-04 18:21 UTC
[R-es] agregar meses con compras 0 cuando no aparece mes por no. de cliente
Estimados usuarios de R: Tengo que pedirles ayuda. Tengo un dataframe en el cual por número de vendedor tengo las ventas mes a mes que realizaron. No todos los vendedores tienen ventas todos los meses. A los vendedores que aparecen en la lista quiero agregarles ventas iguales cero en aquellos meses que no aparecen en el data.frame. Por ejemplo el data.frame se podría ser así: no_cliente ventas mes 1 1 1 1 223 2 1 224 3 3 447 1 78 335,75 8 2901 186,3 2 2901 886,18 3 2901 1013,39 7 2901 979,14 9 2901 177,09 6 Tendría que quedar de la siguiente manera: no_cliente ventas mes 1 1 1 1 223 2 1 224 3 1 0 4 1 0 5 1 0 6 1 0 7 1 0 8 1 0 9 1 0 10 1 0 11 1 0 12 3 447 1 3 0 2 3 0 3 3 0 4 3 0 5 3 0 6 3 0 7 3 0 8 3 0 9 3 0 10 3 0 11 3 0 12 78 0 1 78 0 2 78 0 3 78 0 4 78 0 5 78 0 6 78 0 7 78 335,75 8 78 0 9 78 0 10 78 0 11 78 0 12 2901 0 1 2901 186,3 2 2901 886,18 3 2901 0 4 2901 0 5 2901 177,09 6 2901 1013,39 7 2901 0 8 2901 979,14 9 2901 0 10 2901 0 11 2901 0 12 ¿Alguien puede orientarme sobre como podria hacerlo? ¿Podría crear un data.frame en que aparezcan los vendedores con ventas cero en todos los meses y luego unir ambos dataframe lo único que para los casos que tienen igual mes e igual no_vendedor me quedo con el que tiene ventas mayores a cero? Saludos, Sebastián. [[alternative HTML version deleted]]
Javier Rubén Marcuzzi
2013-Dec-04 19:37 UTC
[R-es] agregar meses con compras 0 cuando no aparece mes por no. de cliente
Estimado Sebastian Kruk Eso puede ser mala idea, yo cometí ese error hace mucho tiempo, depende el caso, el 0 en las matrices hace fallar todo, pero no es culpa del cero, porque 0 quiere decir que hay una cantidad de 0, en cambio nulo quiere decir que no hay. Se podría utilizar, if, case, ==, y otras formas, pero ¿puedes especificar los datos nulos al crear el data.frame?. Yo buscaría por ese lado. Javier Marcuzzi El 04/12/13 15:21, Sebastian Kruk escribió:> Estimados usuarios de R: > > Tengo que pedirles ayuda. > > Tengo un dataframe en el cual por número de vendedor tengo las ventas mes a > mes que realizaron. > > No todos los vendedores tienen ventas todos los meses. > > A los vendedores que aparecen en la lista quiero agregarles ventas iguales > cero en aquellos meses que no aparecen en el data.frame. > > Por ejemplo el data.frame se podría ser así: > > no_cliente ventas mes > 1 1 1 > 1 223 2 > 1 224 3 > 3 447 1 > 78 335,75 8 > 2901 186,3 2 > 2901 886,18 3 > 2901 1013,39 7 > 2901 979,14 9 > 2901 177,09 6 > > Tendría que quedar de la siguiente manera: > > no_cliente ventas mes > 1 1 1 > 1 223 2 > 1 224 3 > 1 0 4 > 1 0 5 > 1 0 6 > 1 0 7 > 1 0 8 > 1 0 9 > 1 0 10 > 1 0 11 > 1 0 12 > 3 447 1 > 3 0 2 > 3 0 3 > 3 0 4 > 3 0 5 > 3 0 6 > 3 0 7 > 3 0 8 > 3 0 9 > 3 0 10 > 3 0 11 > 3 0 12 > 78 0 1 > 78 0 2 > 78 0 3 > 78 0 4 > 78 0 5 > 78 0 6 > 78 0 7 > 78 335,75 8 > 78 0 9 > 78 0 10 > 78 0 11 > 78 0 12 > 2901 0 1 > 2901 186,3 2 > 2901 886,18 3 > 2901 0 4 > 2901 0 5 > 2901 177,09 6 > 2901 1013,39 7 > 2901 0 8 > 2901 979,14 9 > 2901 0 10 > 2901 0 11 > 2901 0 12 > ¿Alguien puede orientarme sobre como podria hacerlo? > > ¿Podría crear un data.frame en que aparezcan los vendedores con ventas cero > en todos los meses y luego unir ambos dataframe lo único que para los casos > que tienen igual mes e igual no_vendedor me quedo con el que tiene ventas > mayores a cero? > > Saludos, > > Sebastián. > > [[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]]
daniel
2013-Dec-04 20:27 UTC
[R-es] agregar meses con compras 0 cuando no aparece mes por no. de cliente
Sebastián No se para que vas a usar los datos, pero yo no usaría ceros cuando el dato no esta disponible ( me saltearía el último paso de la rutina que te mando). Seguramente hay mejores y mas eficientes maneras de hacerlo en R pero esta es una quizás no muy elegante: original <- matrix( c(1 ,1 ,1, 1, 223, 2, 1, 224, 3, 3, 447, 1, 78, 335.75, 8, 2901, 186.3, 2, 2901, 886.18, 3, 2901, 1013.39, 7, 2901, 979.14, 9, 2901, 177.09, 6), ncol= 3, byrow= TRUE) df_original <- as.data.frame(original) colnames(df_original) <- c('no_cliente', 'ventas', 'mes') aux <- unique(data.frame( no_cliente = rep(unique(df_original$no_cliente), each=12), meses = rep(1:12,12))) colnames(aux) <- c( 'no_cliente', 'mes') dd <- merge( df_original, aux, by = c('mes', 'no_cliente'), all=TRUE) dd <- dd[ ,c(2, 1, 3)] dd <- dd[ do.call(order, dd), ] df_final <- dd[ , c( 1, 3, 2)] df_final[ is.na(df_final) == TRUE ] <- 0 Espero te sirva, Daniel Merino El 4 de diciembre de 2013 15:21, Sebastian Kruk <residuo.solow@gmail.com>escribió:> Estimados usuarios de R: > > Tengo que pedirles ayuda. > > Tengo un dataframe en el cual por número de vendedor tengo las ventas mes a > mes que realizaron. > > No todos los vendedores tienen ventas todos los meses. > > A los vendedores que aparecen en la lista quiero agregarles ventas iguales > cero en aquellos meses que no aparecen en el data.frame. > > Por ejemplo el data.frame se podría ser así: > > no_cliente ventas mes > 1 1 1 > 1 223 2 > 1 224 3 > 3 447 1 > 78 335,75 8 > 2901 186,3 2 > 2901 886,18 3 > 2901 1013,39 7 > 2901 979,14 9 > 2901 177,09 6 > > Tendría que quedar de la siguiente manera: > > no_cliente ventas mes > 1 1 1 > 1 223 2 > 1 224 3 > 1 0 4 > 1 0 5 > 1 0 6 > 1 0 7 > 1 0 8 > 1 0 9 > 1 0 10 > 1 0 11 > 1 0 12 > 3 447 1 > 3 0 2 > 3 0 3 > 3 0 4 > 3 0 5 > 3 0 6 > 3 0 7 > 3 0 8 > 3 0 9 > 3 0 10 > 3 0 11 > 3 0 12 > 78 0 1 > 78 0 2 > 78 0 3 > 78 0 4 > 78 0 5 > 78 0 6 > 78 0 7 > 78 335,75 8 > 78 0 9 > 78 0 10 > 78 0 11 > 78 0 12 > 2901 0 1 > 2901 186,3 2 > 2901 886,18 3 > 2901 0 4 > 2901 0 5 > 2901 177,09 6 > 2901 1013,39 7 > 2901 0 8 > 2901 979,14 9 > 2901 0 10 > 2901 0 11 > 2901 0 12 > ¿Alguien puede orientarme sobre como podria hacerlo? > > ¿Podría crear un data.frame en que aparezcan los vendedores con ventas cero > en todos los meses y luego unir ambos dataframe lo único que para los casos > que tienen igual mes e igual no_vendedor me quedo con el que tiene ventas > mayores a cero? > > Saludos, > > Sebastián. > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >-- Daniel [[alternative HTML version deleted]]
Carlos Ortega
2013-Dec-04 22:22 UTC
[R-es] agregar meses con compras 0 cuando no aparece mes por no. de cliente
En misma línea de lo hecho por Daniel... #------------------------- Lines <- "no_cliente ventas mes 1 1 1 1 223 2 1 224 3 3 447 1 78 335.75 8 2901 186.3 2 2901 886.18 3 2901 1013.39 7 2901 979.14 9 2901 177.09 6 " t.con<-textConnection(Lines) dat.in<-read.table(t.con, header=T, as.is=T) close(t.con) cli.en <- unique(dat.in$no_cliente) dat.comp <- data.frame( cliente=rep(cli.en,each=12),mes.es=rep(1:12,length(cli.en)) ) res.ult <- merge(dat.in,dat.comp, by.x=c(1,3), by.y=c(1,2), all=TRUE) res.ult$ventas[is.na(res.ult$ventas)] <- 0 #------------------------- Saludos, Carlos Ortega www.qualityexcellence.es El 4 de diciembre de 2013 21:27, daniel <daniel319@gmail.com> escribió:> Sebastián > > No se para que vas a usar los datos, pero yo no usaría ceros cuando el dato > no esta disponible ( me saltearía el último paso de la rutina que te > mando). Seguramente hay mejores y mas eficientes maneras de hacerlo en R > pero esta es una quizás no muy elegante: > > > original <- matrix( c(1 ,1 ,1, > 1, 223, 2, > 1, 224, 3, > 3, 447, 1, > 78, 335.75, 8, > 2901, 186.3, 2, > 2901, 886.18, 3, > 2901, 1013.39, 7, > 2901, 979.14, 9, > 2901, 177.09, 6), ncol= 3, byrow= TRUE) > > df_original <- as.data.frame(original) > colnames(df_original) <- c('no_cliente', 'ventas', 'mes') > aux <- unique(data.frame( no_cliente = rep(unique(df_original$no_cliente), > each=12), meses = rep(1:12,12))) > colnames(aux) <- c( 'no_cliente', 'mes') > dd <- merge( df_original, aux, by = c('mes', 'no_cliente'), all=TRUE) > dd <- dd[ ,c(2, 1, 3)] > dd <- dd[ do.call(order, dd), ] > df_final <- dd[ , c( 1, 3, 2)] > df_final[ is.na(df_final) == TRUE ] <- 0 > > > Espero te sirva, > > Daniel Merino > > > > El 4 de diciembre de 2013 15:21, Sebastian Kruk > <residuo.solow@gmail.com>escribió: > > > Estimados usuarios de R: > > > > Tengo que pedirles ayuda. > > > > Tengo un dataframe en el cual por número de vendedor tengo las ventas > mes a > > mes que realizaron. > > > > No todos los vendedores tienen ventas todos los meses. > > > > A los vendedores que aparecen en la lista quiero agregarles ventas > iguales > > cero en aquellos meses que no aparecen en el data.frame. > > > > Por ejemplo el data.frame se podría ser así: > > > > no_cliente ventas mes > > 1 1 1 > > 1 223 2 > > 1 224 3 > > 3 447 1 > > 78 335,75 8 > > 2901 186,3 2 > > 2901 886,18 3 > > 2901 1013,39 7 > > 2901 979,14 9 > > 2901 177,09 6 > > > > Tendría que quedar de la siguiente manera: > > > > no_cliente ventas mes > > 1 1 1 > > 1 223 2 > > 1 224 3 > > 1 0 4 > > 1 0 5 > > 1 0 6 > > 1 0 7 > > 1 0 8 > > 1 0 9 > > 1 0 10 > > 1 0 11 > > 1 0 12 > > 3 447 1 > > 3 0 2 > > 3 0 3 > > 3 0 4 > > 3 0 5 > > 3 0 6 > > 3 0 7 > > 3 0 8 > > 3 0 9 > > 3 0 10 > > 3 0 11 > > 3 0 12 > > 78 0 1 > > 78 0 2 > > 78 0 3 > > 78 0 4 > > 78 0 5 > > 78 0 6 > > 78 0 7 > > 78 335,75 8 > > 78 0 9 > > 78 0 10 > > 78 0 11 > > 78 0 12 > > 2901 0 1 > > 2901 186,3 2 > > 2901 886,18 3 > > 2901 0 4 > > 2901 0 5 > > 2901 177,09 6 > > 2901 1013,39 7 > > 2901 0 8 > > 2901 979,14 9 > > 2901 0 10 > > 2901 0 11 > > 2901 0 12 > > ¿Alguien puede orientarme sobre como podria hacerlo? > > > > ¿Podría crear un data.frame en que aparezcan los vendedores con ventas > cero > > en todos los meses y luego unir ambos dataframe lo único que para los > casos > > que tienen igual mes e igual no_vendedor me quedo con el que tiene ventas > > mayores a cero? > > > > Saludos, > > > > Sebastián. > > > > [[alternative HTML version deleted]] > > > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es@r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > > -- > Daniel > > [[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]]