Retorno porcentaje restante dentro de un grupo, utilizando la primera fecha del conteo del grupo.
No es el mejor título, pero estoy tratando de realizar un seguimiento de las tareas pendientes utilizando exportaciones de datos semanales. Quiero usar el recuento total de tareas a partir de la fecha mínima (por ejemplo, 1 de enero) de cada año como una variable para devolver el porcentaje restante (proporción) cada semana durante ese año. Ver ejemplo:
dt <- data.table(id.date=as.Date(c(rep('2019-01-01',80),rep('2019-01-08',60),rep('2019-01-15',40),
rep('2019-01-22',40),rep('2020-01-01',70),rep('2020-01-08',50),
rep('2020-01-15',40),rep('2020-01-29',20))),
task.type=rep('taskA'))[order(id.date)][,year:=year(id.date)]
2 registros de ejemplo por informe semanal
dt[,.SD[sample(.N,min(2,.N))],by=id.date]
id.date task.type year
<date> <chr> <int>
2019-01-01 taskA 2019<br>
2019-01-01 taskA 2019<br>
2019-01-08 taskA 2019<br>
2019-01-08 taskA 2019<br>
2019-01-15 taskA 2019<br>
2019-01-15 taskA 2019<br>
2019-01-22 taskA 2019<br>
2019-01-22 taskA 2019<br>
2020-01-01 taskA 2020<br>
2020-01-01 taskA 2020
2020-01-08 taskA 2020<br>
2020-01-08 taskA 2020<br>
2020-01-15 taskA 2020
2020-01-15 taskA 2020<br>
2020-01-29 taskA 2020<br>
2020-01-29 taskA 2020
Y el resultado deseado:
para los informes semanales en 2019, se utilizarían 80 tareas para todos los informes en 2019
y para 2020, se usarían 70.
id.date N pct.rem
<date> <int> <dbl>
2019-01-01 80 1.0000000<br>
2019-01-08 60 0.7500000<br>
2019-01-15 40 0.5000000<br>
2019-01-22 40 0.5000000<br>
2020-01-01 70 1.0000000<br>
2020-01-08 50 0.7142857<br>
2020-01-15 40 0.5714286<br>
2020-01-29 20 0.2857143
He intentado rehacer algunas de las respuestas de esta discusión de SO aquí. Pero sin éxito. Supongo que necesito utilizar .SD o .EACHI de alguna manera, pero recién estoy empezando con data.table.
Cualquier orientación aquí es muy apreciada. Avísame si necesitas más claridad. Gracias.
davy.ai
Para calcular el porcentaje de tareas restantes cada semana, primero necesitamos calcular el número total de tareas a partir de la fecha mínima de cada año. Podemos lograr esto utilizando el paquete
dplyr
para agrupar los datos por año y luego calcular el número total de tareas a partir de la fecha mínima de cada año. Luego podemos combinar esta información con el conjunto de datos original utilizando la funciónmerge
y calcular el porcentaje de tareas restantes cada semana como una proporción del total de tareas a partir de la fecha mínima de ese año. Aquí está el código para lograr esto:La salida debe ser: