Saturday, 15 June 2013

r - Filter data frame based on multiple conditions in another data frame -


मेरे पास दो डेटा फ़्रेम हैं:

  • df जहां के लिए एकल x एकाधिक मान हैं y
  • matchDf जो कि परिभाषित करता है कि मैं फिल्टर को df का उपयोग करना चाहूंगा

मैं केवल उन पंक्तियों को फ़िल्टर करना चाहूंगा जहां y कम या बराबर max_y दिया जाता है x अंतराल में गिरता है & lt; x_from, x_to)

क्या यह आर में करने के लिए कोई तरीका है (बिना एसक्यूएल मैं उपयोग किया है)?

  df & lt; - read.table (हेडर = TRUE, text = 'xy 100 0.1 100 0.2 100 0.3 250 0.2 250 0.3 250 0.4 375 0.2 375 0.25 375 0.35 420 0.15 420 0.16 420 0.17 500 0.23 500 0.55') MatchDf & lt; - read.table (हेडर = TRUE, text = 'x_from x_to max_y 0 300 .2 300 500 .3 500 99 999 .5') लाइब्रेरी (sqldf) sqldf ('डीएफ में शामिल होने से एक। (कुल्हाड़ी & gt; = बी.एक्स_फ्रेम और कुल्हाड़ी & lt; b.x_to और एआई & lt; = b.max_y) ')  

इसे आज़माएं:

<प्री> df [df $ y & lt; = matchDf $ max_y [कट (df $ x, c (0, matchDf $ x_to))],] xy 1 100 0.10 2 100 0.20 4 250 0.20 7 375 0.20 8 375 0.25 10 420 0.15 11 420 0.16 12 420 0.17 13 500 0.23

यहाँ क्या हो रहा है कि कट आपको matchDf < / कोड> df में प्रत्येक अवलोकन होना चाहिए। उसके बाद, आप इसे केवल एक स्थितीय पंक्ति निष्कर्षण वेक्टर के रूप में उपयोग करते हैं, और y के लिए सशर्त रिश्ते को और lt का उपयोग करते हैं। ; =

यह देखने के लिए कि कैसे कट काम करता है, बस इसे अभिव्यक्ति से हटाएं:

  & gt; कट (डीएफ $ x, सी (0, मैचडीएफ $ x_ टू)) [1] (0,300) (0,300) (0,300) (0,300) (0,300) (0,300) (300,500) (300,500) (300,500) (300,500) (300,500 ] (300,500) (300,500) (300,500) स्तर: (0,300) (300,500) (500,1e + 05)  

स्तर लेबल अप्रासंगिक हैं, क्योंकि [ निकालने के लिए अंतर्निहित पूर्णांक मानों का उपयोग करता है।


No comments:

Post a Comment