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.

Cómo simplificar el código de filtro para días determinados.

Cuando filtro algunos valores de días desde un dataframe, tengo que repetir ‘as.Date’ muchas veces en la condición de filtro. ¿Hay alguna manera de simplificarlo? ¡Gracias!

biblioteca(tidyverse)
test_data <- data.frame(mday=seq.Date(as.Date('2021-1-1'),
                        as.Date('2021-12-30'),by="1 día"),
                        value=rnorm(364))
# no funciona
test_data %>% filter(mday %in% c(as.Date('2021-1-1','2021-7-1','2021-10-7')))

# funciona, pero tengo que repetir 'as.date' muchas veces
test_data %>% filter(mday %in% c(as.Date('2021-1-1'),
                                 as.Date('2021-7-1'),
                                 as.Date('2021-10-7')))
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera de simplificarlo usando el operador %>% y la función ymd() del paquete lubridate para convertir las fechas a la clase Date. Con este enfoque, solo necesitas llamar a as.Date() una vez. A continuación, se muestra un código de ejemplo:

    library(tidyverse)
    library(lubridate)
    
    test_data <- data.frame(mday=seq.Date(as.Date('2021-1-1'), as.Date('2021-12-30'), by="1 day"), value=rnorm(364))
    
    # condición de filtro simplificada con la función ymd()
    test_data %>% filter(mday %in% ymd('2021-1-1', '2021-7-1', '2021-10-7'))
    

    Esto te dará el mismo resultado que el segundo código de filter() en tu pregunta.

Comments are closed.