2015-12-11 12 views
10
पर dplyr फिल्टर

मेरी tbl_df:दिनांक

> 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 

मैं अगर Date से अधिक 2015-09-04 और कम से कम 2015-09-18

है सब rows उदाहरण के लिए तिथि के आधार पर चयन करना चाहते हैं परिणाम होना चाहिए:

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

मैंने निम्नलिखित की कोशिश की लेकिन यह खाली खाली वेक्टर लौटाता है।

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

बस रिटर्न:

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

इसके अलावा उद्धरण के साथ की कोशिश की।

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

का उपयोग कर लेकिन यह मेरे पूरे सितम्बर डेटा देता है।

between ऑपरेटर dplyr से Date प्रकार चर पर between ऑपरेटर का उपयोग करने का एक और अधिक प्रभावी तरीका है ??

+1

क्या आप अपने प्रश्न में str (p2p_dt_SKILL_A) जोड़ सकते हैं। मैं देखना चाहता हूं कि तिथि 'दिनांक' वस्तु है या कुछ और –

+0

@PLapointe पहले से ही रिटर्न हिस्से में है। 'वेरिएबल नहीं दिखाए गए: पैच (fctr), दिनांक (दिनांक), Prod_DL (dbl)' ... इसकी दिनांक प्रकार – Shery

+0

दिनांक आपके कोड के उस भाग में उद्धृत नहीं किया गया है। "इसके ऊपर अपने कोड का उपयोग करके, यह काम करता है। नीचे मेरा जवाब देखें। –

उत्तर

11

तिथि ठीक से एक date इस प्रारूप में उपलब्ध है, तो आपके पहली कोशिश काम करता है:

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 

अद्यतन

फिर भी अगर डेटा प्रकार 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

है, लेकिन यह परिणाम नहीं दिखाता है ... I मैं वही काम कर रहा हूं – Shery

+0

क्या आपके कोड में उद्धृत दिनांक (") हैं? आपके प्रश्न में, आपने उद्धृत और गैर-उद्धृत दोनों हैं। –

+0

दोनों के साथ प्रयास किया ... हालांकि, मेरा 'डेटाफ्रेम' प्रकार 'tbl_dl' प्रकार का है, यह सुनिश्चित नहीं है कि इससे कोई फर्क पड़ता है? – Shery

2

एक और अधिक वर्बोज़ विकल्प एक्स> = बाईं & एक्स < = सही के लिए समारोह between, एक शॉर्टकट का उपयोग करने के लिए होगा। हमें = साइन के लिए दिन को बदलने की आवश्यकता है, और as.Date (स्पष्टीकरण here) का उपयोग करने की आवश्यकता है।

p2p_dt_SKILL_A%>% 
       select(Patch,Date,Prod_DL)%>% 
       filter(between(Date, as.Date("2015-09-05"),as.Date("2015-09-17"))) 
संबंधित मुद्दे