2012-03-30 17 views
45

मेरे पास 100 कॉलम के साथ डेटाफ्रेम है, और मुझे केवल दो स्तंभों की तुलना करके अद्वितीय पंक्तियां मिलेंगी। मुझे उम्मीद है कि यह एक आसान है, लेकिन मैं इसे unique या duplicated के साथ काम नहीं कर सकता।केवल चयनित कॉलम के साथ डेटाफ्रेम पर अद्वितीय

नीचे में, मैं अद्वितीय चाहते हैं केवल आईडी और आईडी 2 का उपयोग कर:

data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z")) 

id id2 somevalue 
1 1   x 
1 1   y 
3 4   z 

मैं प्राप्त करने के लिए चाहते हैं या तो:

id id2 somevalue 
1 1   x 
3 4   z 

या:

id id2 somevalue 
1 1   y 
3 4   z 

(मुझे कोई वरीयता नहीं है कि अद्वितीय पंक्तियों को रखा गया है)

+0

आपका वांछित निर्गम अच्छी तरह से परिभाषित नहीं है। आप एक्स को शामिल करने का चयन कैसे करते हैं लेकिन वाई नहीं? इस निर्णय को हर दोहराई गई पंक्ति के प्रत्येक कॉलम के लिए बनाया जाना चाहिए, और आपने इसे कैसे किया जाए इसके बारे में कोई संकेत नहीं दिया है। – joran

+0

मुझे कोई वरीयता नहीं है कि 'x' या 'y' शामिल है या नहीं। मैं सवाल अपडेट करूंगा। – Ina

उत्तर

77

ठीक है, अगर यह गैर दोहराया स्तंभ आपने चुना है जो मूल्य कोई फर्क नहीं पड़ता, यह बहुत आसान होना चाहिए:

dat <- data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z")) 
> dat[!duplicated(dat[,c('id','id2')]),] 
    id id2 somevalue 
1 1 1   x 
3 3 4   z 

अंदर duplicated कॉल, मैं बस dat से केवल उन स्तंभों गुजर रहा है कि मैं डुप्लीकेट नहीं चाहता। यह कोड स्वचालित रूप से किसी भी संदिग्ध मूल्यों के पहले का चयन करेगा। (इस मामले में, एक्स।)

+0

इस वेबसाइट के अनुसार एक डेटाटेबल – Ferroao

+0

@ फेरोओओ के लिए संस्करण क्या है, एसक्यूएल http://www.dofactory.com/sql/select-distinct में यह संभव नहीं है –

8

unique() का उपयोग करना:

dat <- data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z"))  
dat[row.names(unique(dat[,c("id", "id2")])),] 
संबंधित मुद्दे