दिलचस्प पोस्ट
पृष्ठ के नीचे jQuery स्क्रॉल करें कौन सी cmd.exe आंतरिक कमांड सफलतापूर्वक 0 पर ERRORLEVEL को साफ़ करें? एचटीएमएल 5 कैनवास का प्रयोग – मनमाने बिंदु के बारे में छवि को घुमाने के लिए क्या वर्तमान खंड को एक दृश्यपेगे द्वारा देखा जा रहा है? एएसपीएनटीटी एमवीसी में डीडी / एमएम / याय प्रारूप में दिनांक समय मान प्रदर्शित करें पायथन प्राइम कारक ढूँढना मैं सार्वजनिक-कुंजी प्रमाणीकरण कैसे सेटअप करूं? SPARQL क्वेरी से एकत्रित परिणाम कम से कम ट्विटर बूटस्ट्रैप के लिए सभी चयनकर्ताओं को प्रीफ़िक्स करना कैसे वर्तमान पंक्ति को jqgrid में जारी रखने के लिए फ़ोकस पर क्लिक करने योग्य TextView का रंग बदलें और क्लिक करें? पायथन: नाम का समाधान; समारोह डीईएफ़ का क्रम क्यों वैश्विक चर गलत हैं? कैसे सी # प्रोग्राम में माइक्रोसॉफ्ट एक्सेस डेटाबेस बनाने के लिए? एंगल इयू-राउटर का उपयोग करके राज्य में परिवर्तन के बिना यूआरएल क्वेरी पैरामीटर सेट करें

डेटाफ्रेम से डुप्लिकेट हटाएं डुप्लिकेट

यह एक साधारण समस्या की तरह लगता है, लेकिन मुझे यह पता नहीं लग सकता। मैं एक डेटाफ्रेम (डीएफ) से डुप्लिकेट्स को निकालना चाहता हूं यदि दो कॉलम में समान मूल्य हैं, भले ही वे उल्टे क्रम में हों मेरा क्या मतलब है, कहें कि आपके पास निम्न डेटा फ्रेम है:

a <- c(rep("A", 3), rep("B", 3), rep("C",2)) b <- c('A','B','B','C','A','A','B','B') df <-data.frame(a,b) ab 1 AA 2 AB 3 AB 4 BC 5 BA 6 BA 7 CB 8 CB 

अगर मैं अब डुप्लिकेट निकालता हूं, तो मुझे निम्न डेटा फ्रेम मिलता है:

 df[duplicated(df),] ab 3 AB 6 BA 8 CB 

हालांकि, मैं इस डेटा फ्रेम में पंक्ति 6 ​​को भी निकालना चाहूंगा, क्योंकि "ए", "बी" "बी", "ए" के समान है। मैं इसे स्वचालित रूप से कैसे कर सकता हूं?

आदर्श रूप से मैं निर्दिष्ट कर सकता हूं कि कौन से दो कॉलम की तुलना करना है क्योंकि डेटा फ़्रेम में भिन्न स्तंभ हो सकते हैं और बहुत बड़ा हो सकता है

धन्यवाद!

Solutions Collecting From Web of "डेटाफ्रेम से डुप्लिकेट हटाएं डुप्लिकेट"

एक समाधान पहले df प्रत्येक पंक्ति को सॉर्ट करना है:

 for (i in 1:nrow(df)) { df[i, ] = sort(df[i, ]) } df ab 1 AA 2 AB 3 AB 4 BC 5 AB 6 AB 7 BC 8 BC 

उस वक्त यह डुप्लिकेट तत्वों को निकालने का मामला है:

 df = df[!duplicated(df),] df ab 1 AA 2 AB 4 BC 

टिप्पणियों में उल्लिखित थलटेलमेल के रूप में, आपका कोड वास्तव में डुप्लिकेट रखता है। उन्हें उपयोग करने की आवश्यकता है !duplicated उन्हें हटाने के लिए !duplicated

एरी के जवाब को विस्तारित करने के लिए, यह जांचने के लिए स्तंभ निर्दिष्ट करें कि क्या अन्य स्तंभ भी हैं:

 a <- c(rep("A", 3), rep("B", 3), rep("C",2)) b <- c('A','B','B','C','A','A','B','B') df <-data.frame(a,b) df$c = sample(1:10,8) df$d = sample(LETTERS,8) df abcd 1 AA 10 B 2 AB 8 S 3 AB 7 J 4 BC 3 Q 5 BA 2 I 6 BA 6 U 7 CB 4 L 8 CB 5 V cols = c(1,2) newdf = df[,cols] for (i in 1:nrow(df)) { newdf[i, ] = sort(df[i,cols]) } df[!duplicated(newdf),] abcd 1 AA 8 X 2 AB 7 L 4 BC 2 P 

अन्य उत्तर प्रत्येक और हर पंक्ति के लिए मान निर्दिष्ट करने के for लूप का उपयोग करते हैं हालांकि यह कोई समस्या नहीं है, यदि आपके पास 100 पंक्तियां हैं, या एक हज़ार भी हैं, तो आप 1-एम पंक्तियों के क्रम का बड़ा डेटा प्राप्त कर सकते हैं।

data.table का उपयोग करते हुए अन्य लिंक किए गए उत्तर से चोरी data.table , आप ऐसा कुछ करने की कोशिश कर सकते हैं:

 df[!duplicated(data.frame(list(do.call(pmin,df),do.call(pmax,df)))),] 

एक बड़ा डेटासेट ( df2 ) के साथ तुलना बेंचमार्क:

 df2 <- df[sample(1:nrow(df),50000,replace=TRUE),] system.time( df2[!duplicated(data.frame(list(do.call(pmin,df2),do.call(pmax,df2)))),] ) # user system elapsed # 0.07 0.00 0.06 system.time({ for (i in 1:nrow(df2)) { df2[i, ] = sort(df2[i, ]) } df2[!duplicated(df2),] } ) # user system elapsed # 42.07 0.02 42.09 

apply का उपयोग लूप से बेहतर विकल्प होगा।

 newDf <- data.frame(t(apply(df,1,sort))) 

आपको अभी करने की ज़रूरत है, डुप्लिकेट निकाल दें

 newDf <- newDf[!duplicated(newDf),]