दिलचस्प पोस्ट
एआरसी के साथ आईओएस एप, किसी ऑब्जेक्ट के स्वामी कौन है यह पता लगाएं मुझे ई-मेल पते को कैसे मान्य करना चाहिए? NullPointerException onCreate में दृश्यों को एक्सेस करना () PHP मेल () और / या PHPMailer डीबग करना Groovy शेल कमानों को क्रियान्वित करता है स्ट्रिंगमॉड $ एंड्रॉइडब्लॉकग्रायर पॉलिसी। नेटवर्क नेटवर्क आप पर्ल में, एक बार, स्टडरर, स्टडआउट और एक्सेक्ट कोड कैसे कैप्चर करते हैं? संदर्भ – यह प्रतीक PHP में क्या मतलब है? पता लगाएँ कि एक आउटगोइंग कॉल का उत्तर दिया गया है या नहीं कैसे iphone 4 के स्क्रीन आकार की जांच करने के लिए और iphone 5 प्रोग्राम में तेजी से INNER SQL सर्वर में बाएं जुड़ने के प्रदर्शन में शामिल हों I अन्य ऐप्स में सामग्री साझा करने के लिए FileProvider का समर्थन कैसे करें? मैं गिट में फ़ाइलों को एक पूर्व अनुच्छेद के पथ में कैसे जोड़ूं? स्विफ्ट स्ट्रिंग पर वर्णों को बदलने का कोई तरीका? जावा में एक कस्टम जेबटन बनाना

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

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

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 ​​को भी निकालना चाहूंगा, क्योंकि "ए", "बी" "बी", "ए" के समान है। मैं इसे स्वचालित रूप से कैसे कर सकता हूं?

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

धन्यवाद!

वेब के समाधान से एकत्रित समाधान "डेटाफ्रेम से डुप्लिकेट हटाएं डुप्लिकेट"

एक समाधान पहले 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),]