es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Registrar los días consecutivos promedio por grupo.

Tengo un tibble con las siguientes columnas y más de un millón de filas:

   Emp_ID Start_Date Consec_Days
    <int> <date>           <dbl>
 1   4    2018-02-19          NA
 2   4    2018-02-20           1
 3   4    2018-02-21           1
 4   3    2016-12-26          NA
 5   3    2017-01-02           0
 6   3    2017-01-03           1
 7   3    2017-01-04           1
 8   3    2017-01-06           0
 9   3    2017-01-07           1
10   3    2017-01-09           0

La columna “Start_Date” es el día en que un empleado comienza a trabajar. Me gustaría crear una columna que calcule el promedio de días consecutivos trabajados para cada ID de empleado único. Cada valor “NA” indica el primer día en que un empleado en particular comenzó a trabajar. El problema es que no sé cómo tener en cuenta los valores “NA” y “0” en la columna “Consec_Days” para obtener un promedio de días consecutivos trabajados.

He intentado hacer referencia a las siguientes publicaciones, pero no he podido hacer que funcionen en mi caso:

https://stackoverflow.com/questions/52914669/how-to-find-mean-of-n-consecutive-days-in-each-group-r

¡Cualquier ayuda sería muy apreciada!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para calcular el número promedio de días consecutivos trabajados para cada ID de empleado único, necesitamos primero reemplazar todos los valores NA en Consec_Days con 0. Esto se debe a que asumimos que si un empleado no tiene un valor en Consec_Days, significa que solo trabajó por un día. Luego crearemos una nueva columna con un total acumulado de días consecutivos trabajados para cada ID de empleado utilizando la función cumsum. Luego podemos agrupar los datos por ID de empleado y calcular el número promedio de días consecutivos trabajados utilizando la función mean.

    Aquí está el código para lograr esto:

    “`{r}
    library(dplyr)

    Reemplazar valores NA en Consec_Days con 0

    df <- df %>% mutate(Consec_Days = ifelse(is.na(Consec_Days), 0, Consec_Days))

    Crear nueva columna con el total acumulado de días consecutivos trabajados

    df <- df %>% group_by(Emp_ID) %>%
    mutate(Consec_Days_Running_Total = cumsum(Consec_Days))

    Agrupar por ID de empleado y calcular el número promedio de días consecutivos trabajados

    result <- df %>% group_by(Emp_ID) %>%
    summarise(Avg_Consec_Days_Worked = mean(Consec_Days_Running_Total))
    “`

    Este código primero carga la biblioteca dplyr para la manipulación de datos. Luego usamos la función mutate para reemplazar todos los valores NA en Consec_Days con 0. Luego agrupamos los datos por ID de empleado utilizando el operador de tubería %>% group_by (Emp_ID) y creamos una nueva columna llamada Consec_Days_Running_Total usando la función cumsum en la columna Consec_Days.

    Finalmente, agrupamos los datos por ID de empleado nuevamente utilizando group_by (Emp_ID) y calculamos el promedio de la columna Consec_Days_Running_Total utilizando la función mean. El marco de datos resultante result tendrá una fila para cada ID de empleado único, con el número promedio de días consecutivos trabajados en la columna Avg_Consec_Days_Worked.

Comments are closed.