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

Rubén Coca ruben.coca en gmail.com
Jue Ene 25 13:14:26 CET 2018


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]]



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