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.

Agregar/Combinar/Fusionar solo columnas específicas y brindar una única fila única.

Estoy tratando de transformar un conjunto de datos que tiene múltiples ventas de productos en una fecha. Al final, quiero mantener solo las columnas únicas con la suma de las ventas de productos por día.

Mi RMM:

df <- data.frame(created = as.Date(c("2020-01-01", "2020-01-01", "2020-01-02", "2020-01-02", "2020-01-03", "2020-01-03"), "%Y-%m-%d", tz = "GMT"),
                soldUnits = c(1, 1, 1, 1, 1, 1),
                Weekday = c("Mo","Mo","Tu","Tu","Th","Th"),
                Sunshinehours = c(7.8,7.8,6.0,6.0,8.0,8.0))

Que se ve así:

       Date   soldUnits Weekday Sunshinehours
     2020-01-01   1       Mo      7.8
     2020-01-01   1       Mo      7.8
     2020-01-02   1       Tu      6.0
     2020-01-02   1       Tu      6.0
     2020-01-03   1       We      8.0
     2020-01-03   1       We      8.0

Y debería verse así después de la transformación:

       Date   soldUnits Weekday Sunshinehours
     2020-01-01   2      Mo      7.8
     2020-01-02   2      Tu      6.0
     2020-01-03   2      We      8.0

Intenté aggregate() y group_by, pero sin éxito porque se eliminaron mis datos.

¿Hay alguien que tenga una idea de cómo puedo transformar y limpiar mi conjunto de datos según las especificaciones que mencioné?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado deseado, puedes utilizar la librería dplyr en R.

    Primero, necesitas agrupar el conjunto de datos por fecha y día de la semana utilizando group_by(). Luego, puedes utilizar la función summarise() para obtener la suma de las unidades vendidas y el primer valor de cada variable no numérica (día de la semana y horas de sol) ya que son únicos para cada grupo.

    Aquí está el código:

    library(dplyr)
    
    df %>%
      group_by(created, Weekday, Sunshinehours) %>%
      summarise(soldUnits = sum(soldUnits), .groups = "drop")
    

    Esto debería darte la salida deseada:

    # A tibble: 3 x 4
      created    Weekday Sunshinehours soldUnits
      <date>     <chr>          <dbl>     <dbl>
    1 2020-01-01 Mo               7.8         2
    2 2020-01-02 Tu               6           2
    3 2020-01-03 Th               8           2
    

    ¡Espero que esto te ayude!

Comments are closed.