Grouping and Summing Data by Irregular Time Intervals (R language)

Estoy viendo un poste de reflujo por aquí: R: Número de observaciones dentro de un grupo

Aquí se crean y agrupan los datos diarios a intervalos mensuales (así como intervalos semanales):

library(xts)
library(dplyr)

#create data

date_decision_made = seq(as.Date("2014/1/1"), as.Date("2016/1/1"),by="day")

date_decision_made <- format(as.Date(date_decision_made), "%Y/%m/%d")

property_damages_in_dollars <- rnorm(731,100,10)

final_data <- data.frame(date_decision_made, property_damages_in_dollars)


# weekly

weekly = final_data %>%
    mutate(date_decision_made = as.Date(date_decision_made)) %>%
    group_by(week = format(date_decision_made, "%W-%y")) %>%
    summarise( total = sum(property_damages_in_dollars, na.rm = TRUE), Count = n())


# monthly 

final_data %>%
    mutate(date_decision_made = as.Date(date_decision_made)) %>%
    group_by(week = format(date_decision_made, "%Y-%m")) %>%
    summarise( total = sum(property_damages_in_dollars, na.rm = TRUE), Count = n())

Parece que la declaración "formato" en R (https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/format) se está utilizando para instruir al ordenador a "grupar y resumir" los datos un intervalo fijo.

Mi pregunta: ¿hay una manera de "instruir" el ordenador para "agrupar y resumir" por intervalos irregulares? ¿Por ejemplo, por 11 días, por 3 meses, por 2 años? (Supongo que 3 meses pueden ser escritos como 90 días... 2 años pueden ser escritos como 730 días).

¿Es posible?

Gracias.

Pregunta hecha hace 3 años, 4 meses, 28 días - Por syntaxsensei


4 Respuestas:

  • You can use lubridate's ceiling_date/floor_date to create groups at irregular intervals.

    library(dplyr)
    library(lubridate)
    
    final_data %>%
      mutate(date_decision_made = as.Date(date_decision_made)) %>%
      group_by(group = ceiling_date(date_decision_made, '11 days')) %>%
      summarise(amount = sum(property_damages_in_dollars))
    

    You can also specify intervals like ceiling_date(date_decision_made, '3 years') or ceiling_date(date_decision_made, '2 months').

    Respondida el Dec 19, 2020 a las 06:36 - por logicluminary

    Votos positivos: 0 | Votos negativos: 0

  • Uso data.table

    library(data.table)
    library(lubridate)
    setDT(final_data)[,  .(amount = sum(property_damages_in_dollars)),
          ,.(group = ceiling_date(as.IDate(date_decison_made), "11 days"))]
    

    Respondida el Dec 19, 2020 a las 06:46 - por geekglitcher1735

    Votos positivos: 0 | Votos negativos: 0

  • Sí, es posible agrupar y resumir los datos por intervalos irregulares en R. Para ello, en lugar de usar la función format() para agrupar los datos en intervalos fijos como se muestra en el ejemplo, puedes crear una columna adicional que indique el intervalo deseado y luego agrupar por esa columna.

    Aquí te muestro un ejemplo de cómo podrías agrupar los datos por intervalos irregulares, por ejemplo, por intervalos de 11 días:

    R
    

    Crear intervalos irregulares de 11 días

    final_data$intervalo = cut(as.Date(final_data$date_decision_made), breaks = "11 days")

    Sumarizar por intervalos irregulares de 11 días

    final_data %>% group_by(intervalo) %>% summarise(total = sum(property_damages_in_dollars, na.rm = TRUE), Count = n())

    En este código, la función cut() se utiliza para crear intervalos de 11 días en la columna intervalo. Luego, puedes agrupar y resumir los datos por esos intervalos de forma similar al ejemplo original.

    Puedes ajustar el valor de breaks en la función cut() para crear intervalos de la duración que desees, por ejemplo, 3 meses o 2 años como mencionaste.

    Espero que esta información te sea útil. ¡Déjame saber si tienes alguna otra pregunta!

    Respondida el Dec 20, 2020 a las 06:36 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Sí, es posible agrupar y resumir datos en intervalos irregulares en R.

    Para lograr esto, puedes usar la función cut() para crear intervalos personalizados y luego usar group_by() y summarise() para agrupar y resumir los datos dentro de esos intervalos.

    Ejemplo:

    Supongamos que tienes un conjunto de datos de ventas con las siguientes columnas:

    date: Fecha de la venta product: Nombre del producto sales: Cantidad vendida

    Para agrupar y resumir las ventas en intervalos de 11 días, puedes usar el siguiente código:

    r
    library(dplyr)
    
    sales_data %>%
      mutate(interval = cut(date, breaks = seq(as.Date("2023-01-01"), as.Date("2023-12-31"), by = "11 days"))) %>%
      group_by(interval) %>%
      summarise(total_sales = sum(sales))
    

    Esto creará intervalos de 11 días desde el 1 de enero de 2023 hasta el 31 de diciembre de 2023, y resumirá las ventas totales dentro de cada intervalo.

    Para intervalos más largos, como 3 meses o 2 años, puedes usar un código similar:

    Para intervalos de 3 meses:

    r
    sales_data %>%
      mutate(interval = cut(date, breaks = seq(as.Date("2023-01-01"), as.Date("2023-12-31"), by = "3 months"))) %>%
      group_by(interval) %>%
      summarise(total_sales = sum(sales))
    
    • Para intervalos de 2 años:
    r
    sales_data %>%
      mutate(interval = cut(date, breaks = seq(as.Date("2023-01-01"), as.Date("2023-12-31"), by = "2 years"))) %>%
      group_by(interval) %>%
      summarise(total_sales = sum(sales))
    

    Puedes ajustar los valores de breaks en la función cut() para crear intervalos personalizados según tus necesidades.

    Respondida el Dec 20, 2020 a las 06:40 - por Gemini

    Votos positivos: 0 | Votos negativos: 0