dplyr filtrar por Fecha

mi tbl_df:

    > p2p_dt_SKILL_A%>%
    + select(Patch,Date,Prod_DL)%>%
    + head()
      Patch       Date Prod_DL
    1  P1 2015-09-04    3.43
    2 P11 2015-09-11    3.49
    3 P12 2015-09-18    3.45
...
    4 P13 2015-12-06    3.57
    5 P14 2015-12-13    3.43
    6 P15 2015-12-20    3.47

Quiero para seleccionar todos los rows basado en la fecha en que por ejemplo si Date es mayor que 2015-09-04 y menos de 2015-09-18

El resultado debe ser:

      Patch       Date          Prod_DL
      P1        2015-09-04    3.43
      P11       2015-09-11    3.49

He intentado lo siguiente pero devuelve vacío, vacío, vector.

p2p_dt_SKILL_A%>%
                select(Patch,Date,Prod_DL)%>%
                filter(Date > "2015-09-04" & Date <"2015-09-18")

Sólo devuelve:

> p2p_dt_SKILL_A%>%
+                 select(Patch,Date,Prod_DL)%>%
+                 filter(Date > 2015-09-12 & Date <2015-09-18)
Source: local data table [0 x 3]

Variables not shown: Patch (fctr), Date (date), Prod_DL (dbl)

También lo intentó con comillas.

Y el uso de lubridate

p2p_dt_SKILL_A%>%
                select(Patch,Date,Prod_DL)%>%
                #filter(Date > 2015-09-12 & Date <2015-09-18)%>%
                filter(Patch %in% c("BVG1"),month(p2p_dt_SKILL_A$Date) == 9)%>%
                arrange(Date)

Pero esto me da toda septiembre de datos.

Es allí una manera más eficiente, como el uso de la between operador de dplyr en Date tipos de variables??

Puede agregar str(p2p_dt_SKILL_A) en su pregunta. Quiero ver si la Fecha es una date objeto o algo más
su ya de por sí hay en la devolución de la parte. Variables not shown: Patch (fctr), Date (date), Prod_DL (dbl) … Es un tipo de Fecha
Las fechas no están cotizados ( “” ) en que parte de tu código. Mediante el código justo encima de esto, funciona. Mira mi respuesta a continuación.
probado con las dos citas y unquotes…no funciona… mi dataframe es de tipo tbl_df

OriginalEl autor Shery | 2015-12-11

2 respuestas

  1. 20

    Si la Fecha está correctamente formateado como un date, su primer intento de obras:

    p2p_dt_SKILL_A <-read.table(text="Patch,Date,Prod_DL
    P1,9/4/2015,3.43
    P11,9/11/2015,3.49
    P12,9/18/2015,3.45
    P13,12/6/2015,3.57
    P14,12/13/2015,3.43
    P15,12/20/2015,3.47
    ",sep=",",stringsAsFactors =FALSE, header=TRUE)
    
    p2p_dt_SKILL_A$Date <-as.Date(p2p_dt_SKILL_A$Date,"%m/%d/%Y")
    
    p2p_dt_SKILL_A%>%
                    select(Patch,Date,Prod_DL)%>%
                    filter(Date > "2015-09-04" & Date <"2015-09-18")
      Patch       Date Prod_DL
    1 P11 2015-09-11    3.49

    ACTUALIZACIÓN

    Todavía funciona si los datos es de tipo tbl_df.

    p2p_dt_SKILL_A <-tbl_df(p2p_dt_SKILL_A)
    
    p2p_dt_SKILL_A%>%
                    select(Patch,Date,Prod_DL)%>%
                    filter(Date > "2015-09-04" & Date <"2015-09-18")
    Source: local data frame [1 x 3]
    
      Patch       Date Prod_DL
      (chr)     (date)   (dbl)
    1 P11 2015-09-11    3.49
    Sí, pero no muestra el resultado… estoy haciendo exactamente la misma cosa
    Son las fechas citadas (“) en el código? En su pregunta, tiene cotizados y no cotizados.
    Probé con ambos… sin Embargo, mi dataframe es de tipo tbl_dl no sé si esto hace una diferencia?
    Todavía funciona si los datos es de tipo tbl_df. Ver mis actualizaciones.
    Lapointe Gracias. Yo estaba haciendo un error estúpido. Funciona bien.

    OriginalEl autor Pierre Lapointe

  2. 8

    Otro más detallado opción sería el uso de la función between, un acceso directo para x >= & x <= derecho . Necesitamos cambiar los días a cuenta de la = signo, y el uso de as.Date (explicación aquí).

    p2p_dt_SKILL_A%>%
                    select(Patch,Date,Prod_DL)%>%
                    filter(between(Date, as.Date("2015-09-05"),as.Date("2015-09-17")))

    OriginalEl autor mpalanco

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *