[R-es] Más allá de group_by()

Carlos Ortega cof en qualityexcellence.es
Jue Ene 25 14:55:42 CET 2018


Hola Rubén,

Para hacer estos cálculos, tienes que partir de las tablas de clientes de
tu "Mes_1" y de tu "Mes_2" y utilizar las funciones de mezcla de tablas que
tiene dplyr (left_join ,right_join, inner_join) con los que identificarás
los clientes que están en un mes y en otro y sumar sus cantidades de cada
caso. Y al final esas cantidades (serán data.frames) mezclarlos con la
tabla que has calculado (la inicial que no tiene ni "win" ni "loss")...

La recomendación de dplyr para hacer los joins, perfectamente la puedes
sustituir por otros paquetes/funciones: sqldf, el mismo paquete base con
"merge()", etc...


Saludos,
Carlos Ortega
www.qualityexcellence.es

El 25 de enero de 2018, 13:14, Rubén Coca <ruben.coca en gmail.com> escribió:

> Hola,
> Os planteo una situación a ver si se os ocurre un enfoque que me permita
> solucionarla.
> Partiendo de un data frame con las siguientes variables: mes, cliente,
> facturacion. Tal que así:
>
> df <- data.frame(mes = c(1,1,1,1,2,2,2,2,3,3,3), cliente = c('a', 'b', 'c',
> 'd', 'b', 'c', 'd', 'e', 'b', 'd', 'e'), fact = c(100, 110, 120, 100, 90,
> 80, 110, 100, 90, 70, 120))
>
> mes   cliente   fact
>   1         a    100
>   1         b    110
>   1         c    120
>   1         d    100
>   2         b     90
>   2         c     80
>   2         d    110
>   2         e    100
>   3         b     90
>   3         d     70
>   3         e    120
>
> Con un simple group_by() y summarise() obtengo:
> df <- df %>% group_by(mes) %>% summarise(sumFact = sum(fact))
>
> mes   sumFact
>   1       430
>   2       380
>   3       280
>
> Y ahora viene lo complicado (para mí), quiero añadir dos nuevas columnas:
> win y loss.
> win debe sumar la facturacion de aquellos clientes que no existían en el
> mes n-1. Loss debe sumar la facturación en el mes n-1 de los clientes que
> ya no están en el mes n (y así sucesivamente). De forma que obtengamos el
> data frame final:
>
> mes   sumFact   win   loss
>   1       430    NA     NA
>   2       380   100    100
>   3       280     0     80
>
> En el mes 2, win es la suma de la facturación del cliente e, que no estaba
> en el mes 1 y loss es la suma de la facturación del cliente a, que estaba
> en el mes 1 pero ya no en el 2.
> En el mes 3, win es 0 porque no hay ningún cliente que no existiense en n-1
> y loss es la suma de la facturación del cliente c, que estaba en el mes 2
> pero no en el 3.
>
> Espero haber explicado el caso con suficiente claridad y que podáis
> ayudarme.
> 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
>



-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es