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