2015-09-02 7 views
5
arm<-as.data.frame(matrix(c(1,1,1,2,2,6,7,4,9,10),ncol=2)) 

colnames(arm)<-c("a","b") 

हाय लोग आर में रैंक() कार्यों पर उपयोग करने में असमर्थ है, यह एक डाटासेट मैं आर में बनाया है अब मैं रैंक करने के लिए स्तंभ बी और समूह स्तंभ एक से चाहते हैं। कोड का निम्न भाग ([] को जैसे चाहें, "इस त्रुटि फेंक रहा है, कोई बात नहीं क्या परिवर्तन मैं वाक्य रचना करने के लिए कर sqldf" पैकेज ", आदि ...)sqldf का उपयोग कर

*****Error in sqliteSendQuery(con, statement, bind.data) : error in statement: near "(": syntax error*****

मैं उपयोग कर रहा था।"

arm2<-sqldf("select a, 
     b, 
     rank() over (partition by a order by b) as rank1 
     from arm") 

तब मैं RH2 पैकेज स्थापित किया है और यह निम्न त्रुटि फेंक करने के लिए शुरू: आर के sqldf पैकेज में एसक्यूएल के समारोह की

Error in .verify.JDBC.result(s, "Unable to execute JDBC statement ", statement) : Unable to execute JDBC statement select a, b, rank() over (partition by a order by b) as rank1 from arm (Function "rank" not found; SQL statement: select a, b, rank() over (partition by a order by b) as rank1 from arm [90022-175])

आप कृपया मुझे बताओ कैसे उपयोग करने के लिए रैंक (सका) धन्यवाद।

+4

downvote थोड़ा कठोर लगता है। प्रश्न इस्तेमाल किए गए पैकेज, डेटा का उपयोग, कोड इस्तेमाल किया गया, और त्रुटि संदेश की रूपरेखा बताता है। यहां दिए गए कुछ बकवास को ध्यान में रखते हुए, यह इस मुद्दे को समझाने के प्रयास दिखाता है। – thelatemail

+4

rsqldf डिफ़ॉल्ट रूप से sqlite का उपयोग करता है, जिसमें रैंक() फ़ंक्शन नहीं है। मैं आरएच 2 से परिचित नहीं हूं, लेकिन ऐसा लगता है कि टीआई में एक ही समस्या है। आप उदाहरणों के बाद पोस्टग्रेस्क्ल का प्रयास कर सकते हैं [यहां से] (https://github.com/ggrothendieck/sqldf#12-how-does-one-use-sqldf-with-postgresql) – jeremycg

+0

मुझे यह प्रश्न समझ में नहीं आता है। क्या यह एक बग रिपोर्ट है? यदि ऐसा है, तो कृपया [जीएच] (https://github.com/ggrothendieck/sqldf/issues) पर रिपोर्ट करें। या आप एक सामान्य समाधान की तलाश में हैं? उस स्थिति में, यह त्रुटि आपके शुरुआती प्रयास को दिखाने के लिए केवल प्रासंगिक होनी चाहिए, और इस प्रकार आप कुछ अन्य विकल्पों जैसे 'आर्म $ रैंक 1 <- असूची ((हाथ, tapply (बी, ए, रैंक) के साथ) का उपयोग कर सकते हैं) उदाहरण के लिए। –

उत्तर

2

sqldf SQLite का उपयोग करता है जो rank() फ़ंक्शन - see here का समर्थन नहीं करता है। एच 2 से प्राप्त त्रुटि संदेश से, यह या तो नहीं है, हालांकि यह currently planned है।

sqldf में SQLite के बजाय PostgreSQL का उपयोग करने की क्षमता है, जो उदाहरण के लिए समर्थन रैंक(): see here करता है। पोस्ट के रूप में आपका कोड तब काम करना चाहिए।

आप डॉन हैं टी PostgreSQL उपयोग करना चाहते हैं, तो आप का उपयोग कर SQLite के साथ सही क्रम में बाहर और sqldf डेटा प्राप्त कर सकते हैं:

sqldf("select a, b from arm 
      order by a, b", drv = "SQLite") 

लेकिन रैंकिंग स्तंभ और अधिक कठिन है - कुछ संबंधित जवाब देखें: 1, 2, 3

जब से तुम आर में पहले से ही कर रहे हैं, तो आप dplyr, एक देशी आर पैकेज इस्तेमाल कर सकते हैं:

library(dplyr) 
arm %>% group_by(a) %>% 
     mutate(rank = rank(b)) 

या data.table, एक तेजी से विकल्प:

library(data.table) 
setDT(arm)[ , rank := rank(b), by = a] 
+2

ध्यान दें कि यदि आप वास्तव में SQLite का उपयोग करना चाहते हैं तो: 'a1 <- sqldf ("ए, बी द्वारा आर्म ऑर्डर से बी चुनें); min_rowid <- sqldf ("x का चयन करें। *, मिनट (y.rowid) min_rowid ए 1 एक्स से ए 1 वाई (0) समूह x.a" का उपयोग करके) में शामिल हो गया; sqldf ("ए 1 का चयन करें।*, a1.rowid - min_rowid + 1 रैंक ए 1 से min_rowid का उपयोग करके (ए) ")' –

संबंधित मुद्दे