Hola, Rubén:

Una opción que veo yo es completar los clientes por meses, calcular para cada cliente lo que dió el mes anterior (con la función lag()) y luego sumar si antes había dado 0 o sumar si ahora pasa a dar 0.

Con el código creo que se entiende mejor:

df %>%
  complete(mes, cliente, fill = list(fact = 0)) %>%
  group_by(cliente) %>%
  mutate(ant = lag(fact)) %>%
  group_by(mes) %>%
  summarise(sumFact = sum(fact),
            win = sum(fact[ant == 0]),
            loss = sum(ant[fact == 0])) %>%
  print()

Un saludo
Álvaro

El 25/01/18 a las 13:14, Rubén Coca 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@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es

_______________________________________________
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es

Reply via email to