2015-12-11 25 views
10

mój tbl_df:dplyr filtr na Data

> p2p_dt_SKILL_A%>% 
    + select(Patch,Date,Prod_DL)%>% 
    + head() 
     Patch  Date Prod_DL 
    1 BVG1 2015-09-04 3.43 
    2 BVG11 2015-09-11 3.49 
    3 BVG12 2015-09-18 3.45 
... 
    4 BVG13 2015-12-06 3.57 
    5 BVG14 2015-12-13 3.43 
    6 BVG15 2015-12-20 3.47 

Chcę zaznaczyć wszystkie rows na podstawie daty, na przykład jeśli Date jest większa niż 2015-09-04 i mniej niż 2015-09-18

Wynik powinien być:

 Patch  Date   Prod_DL 
     BVG1  2015-09-04 3.43 
     BVG11  2015-09-11 3.49 

Próbowałem następujące ale zwraca pusty pusty wektor.

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

prostu zwraca:

> 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) 

próbował także z cytatami.

i korzystania 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) 

Ale to daje mi całe dane września.

Czy jest bardziej efektywny sposób, jak korzystanie z operatora between z dplyr na Date zmiennych typów?

+1

Czy możesz dodać str (p2p_dt_SKILL_A) do swojego pytania. Chcę sprawdzić, czy Date jest obiektem 'date' lub czymś innym –

+0

@PLapointe to już tam w części zwrotnej. 'Zmienne nie pokazane: Poprawka (fctr), Data (data), Prod_DL (dbl)' ... Jest to typ daty – Shery

+0

Daty nie są cytowane (") w tej części kodu. Za pomocą kodu tuż nad tym, to działa, spójrz na moją odpowiedź poniżej: –

Odpowiedz

11

Jeśli data jest prawidłowo sformatowany jako date Twoja pierwsza próba działa:

p2p_dt_SKILL_A <-read.table(text="Patch,Date,Prod_DL 
BVG1,9/4/2015,3.43 
BVG11,9/11/2015,3.49 
BVG12,9/18/2015,3.45 
BVG13,12/6/2015,3.57 
BVG14,12/13/2015,3.43 
BVG15,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 BVG11 2015-09-11 3.49 

UPDATE

Nadal działa, jeśli dane są typu 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 BVG11 2015-09-11 3.49 
+0

Tak, ale nie pokazuje wyniku ... I Robię dokładnie to samo – Shery

+0

Czy podane są daty (") w kodzie? W pytaniu masz zarówno cytowane, jak i nie cytowane. –

+0

Próbowałem z obu ... Jednak moje 'daneframe' jest typu' tbl_dl' nie jest pewien, czy to robi różnicę? – Shery

2

Inną opcją bardziej gadatliwy byłoby użyć funkcji between, skrót dla x> = lewej & x < = prawy. Musimy zmienić dni, aby uwzględnić znak = i użyć as.Date (wyjaśnienie here).

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