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.

Resumen de datos por fecha específica para cada año.

Tengo datos diarios de precipitación para 50 años:

año mes día precip_diaria fecha
1960 1 1 3 1960-01-01
1960 1 2 0 1960-02-01

Para cada año, quiero obtener la suma de precipitación para algunos días específicos de la temporada de vegetación en un nuevo df, por ejemplo: desde el 22 de mayo de 1975 hasta el 15 de julio de 1975, desde el 22 de mayo de 1976 hasta el 15 de junio de 1976, etc.

año inicio fin suma media
1975 1975-22-05 1975-15-07 5 3
1976 1976-22-05 1976-15-07 2 1

¿Algún consejo sobre cómo hacer esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una manera de abordar este problema sería filtrar el conjunto de datos original para incluir solo los días específicos de la temporada de vegetación para cada año, y luego usar la función aggregate() para calcular la suma y la media de la precipitación para cada año. Aquí hay un ejemplo de código que podría lograr esto:

    # especificar las fechas de inicio y finalización de la temporada de vegetación
    start_date <- as.Date("22/05")
    end_date <- as.Date("15/07")
    
    # filtrar el conjunto de datos original para incluir solo los días específicos de la temporada de vegetación para cada año
    vegetation_data <- original_data %>%
      mutate(date = as.Date(paste(year, month, day, sep = "-"))) %>% # convertir columnas de año/mes/día a formato de fecha
      filter(date >= as.Date(paste(year, format(start_date, "%m-%d"), sep = "-")) & 
               date <= as.Date(paste(year, format(end_date, "%m-%d"), sep = "-"))) %>%
      mutate(start = as.Date(paste(year, format(start_date, "%m-%d"), sep = "-")),
             end = as.Date(paste(year, format(end_date, "%m-%d"), sep = "-"))) %>%
      select(year, start, end, daily_prec)
    
    # usar la función aggregate para calcular la suma y la media de la precipitación para cada año
    summary_data <- aggregate(daily_prec ~ year + start + end, data = vegetation_data, FUN = function(x) c(sum = sum(x), mean = mean(x)))
    

    Este código establece primero las fechas de inicio y finalización de la temporada de vegetación, y luego utiliza la función filter() para extraer solo las filas que caen dentro de estas fechas para cada año. Luego crea nuevas columnas start y end para almacenar estas fechas específicas para cada año. Finalmente, utiliza la función aggregate() para calcular la suma y la media de la precipitación diaria para cada año, agrupando por year, start y end. El dataframe resultante, summary_data, tiene columnas para year, start, end, sum y mean de la precipitación diaria para cada año.

Comments are closed.