2015-12-11 25 views
10

tbl_df tôi:lọc dplyr vào ngày

> 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 

Tôi muốn chọn tất cả rows dựa trên ngày ví dụ nếu Date lớn hơn 2015-09-04 và ít hơn 2015-09-18

Kết quả sẽ là:

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

Tôi đã thử làm như sau nhưng nó trả về véc-tơ rỗng trống.

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

Chỉ cần trả:

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

Cũng thử với dấu ngoặc kép.

Và sử dụng 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) 

Nhưng điều này mang lại cho tôi dữ liệu toàn bộ Tháng Chín.

Có cách nào hiệu quả hơn như sử dụng toán tử between từ dplyr trên Date biến kiểu ??

+1

Bạn có thể thêm str (p2p_dt_SKILL_A) vào câu hỏi của mình không. Tôi muốn xem liệu Date là một đối tượng 'date' hay cái gì khác –

+0

@PLapointe nó đã có trong phần trả về. 'Các biến không được hiển thị: Patch (fctr), Date (ngày), Prod_DL (dbl)' ... Kiểu ngày của nó – Shery

+0

Ngày không được trích dẫn (") trong phần đó của mã của bạn. Sử dụng mã của bạn ngay trên đó, nó hoạt động Nhìn vào câu trả lời của tôi dưới đây –

Trả lời

11

Nếu ngày được định dạng đúng là một date, thử đầu tiên của bạn hoạt động:

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 

CẬP NHẬT

Tuy nhiên hoạt động nếu dữ liệu là loại 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

Có nhưng nó không hiển thị kết quả ... Tôi đang làm chính xác điều tương tự – Shery

+0

Các ngày được trích dẫn (") trong mã của bạn? Trong câu hỏi của bạn, bạn có cả trích dẫn và không được trích dẫn. –

+0

Đã thử với cả hai ... Tuy nhiên, 'dataframe' của tôi là loại' tbl_dl' không chắc chắn nếu điều đó tạo nên sự khác biệt? – Shery

2

Một tùy chọn tiết hơn sẽ được sử dụng chức năng between, một phím tắt cho x> = trái & x < = đúng. Chúng tôi cần thay đổi ngày để tính đến biển báo = và sử dụng as.Date (giải thích here).

p2p_dt_SKILL_A%>% 
       select(Patch,Date,Prod_DL)%>% 
       filter(between(Date, as.Date("2015-09-05"),as.Date("2015-09-17"))) 
Các vấn đề liên quan