Rubén Coca
2018-01-25 12:14:26 UTC
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]]
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]]