2011-10-21 17 views
68

आर duplicated एक वेक्टर लौटाता है जो दिखाता है कि वेक्टर या डेटा फ्रेम का प्रत्येक तत्व एक छोटे से सबस्क्रिप्ट वाले तत्व का डुप्लिकेट है या नहीं। तो अगर पंक्तियों 3, 4, और 5 पंक्ति डेटा फ्रेम के 5 ही हैं, duplicated मुझे वेक्टरसभी डुप्लिकेट पंक्तियों को ढूंढना, जिनमें "छोटे सबस्क्रिप्ट वाले तत्व"

FALSE, FALSE, FALSE, TRUE, TRUE 

दे देंगे लेकिन इस मामले में मैं वास्तव में

FALSE, FALSE, TRUE, TRUE, TRUE 

प्राप्त करना चाहते हैं कि है, मैं जानना चाहता हूं कि एक पंक्ति को बड़े सबस्क्रिप्ट के साथ एक पंक्ति द्वारा डुप्लिकेट किया गया है या नहीं।

उत्तर

74

duplicated एक fromLast तर्क है। ?duplicated का "उदाहरण" खंड आपको दिखाता है कि इसका उपयोग कैसे करें। को दो बार कॉल करें, एक बार fromLast=FALSE और fromLast=TRUE के साथ और पंक्तियों को लें जहां या तो TRUE हैं।


कुछ देर संपादित करें: आप एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण प्रदान नहीं किया है, तो यहां एक उदाहरण कृपया @jbaums

vec <- c("a", "b", "c","c","c") 
vec[duplicated(vec) | duplicated(vec, fromLast=TRUE)] 
## [1] "c" "c" "c" 
+1

लेकिन क्या यह समाधान यह नहीं मानता कि केवल 2 डुप्लिकेट मान हैं? क्या होगा यदि 2 और अधिक हैं? बीच वाले लोगों को नजरअंदाज कर दिया जाएगा। मुझे पता है कि "डुप्लिकेट" शब्द का शाब्दिक अर्थ "दो गुना" है, लेकिन एक और मजबूत समाधान @ 42-है, हाँ? – JoeM05

+2

पकड़ो, मैंने अभी एक परीक्षण चलाया और पाया कि मैं गलत था: 'x <- c (1: 9, 7:10, 5:22); वाई <- सी (अक्षरों, अक्षरों [1: 5]); परीक्षण <- data.frame (x, y); परीक्षण [डुप्लिकेट (परीक्षण $ x) | डुप्लिकेट (परीक्षण $ x, सेला = TRUE),] ' 7, 8, और 9 की सभी तीन प्रतियों को वापस कर दिया। यह क्यों काम करता है? – JoeM05

+0

क्योंकि मध्य में कब्जा कर लिया जाता है इससे कोई फर्क नहीं पड़ता कि आप अंत से या आगे से शुरू करते हैं। उदाहरण के लिए, 'डुप्लीकेट (सी (1,1,1))' बनाम 'डुप्लिकेट (सी (1,1,1,), सेला = TRUE) 'सी (गलत, सही, सही)' और' सी (सही, सही, FALSE) '। दोनों मामलों में मध्य मूल्य 'TRUE' है। दोनों वैक्टरों के '|' लेना 'सी (सत्य, सही, सही)' देता है। – Brandon

24

आपको duplicated मानों के सेट को इकट्ठा करने की आवश्यकता है, unique लागू करें, और उसके बाद %in% के साथ परीक्षण करें। हमेशा की तरह, एक नमूना समस्या यह प्रक्रिया जीवंत हो जाएगी।

> vec <- c("a", "b", "c","c","c") 
> vec[ duplicated(vec)] 
[1] "c" "c" 
> unique(vec[ duplicated(vec)]) 
[1] "c" 
> vec %in% unique(vec[ duplicated(vec)]) 
[1] FALSE FALSE TRUE TRUE TRUE 
3

मैं same question लिया है के योगदान है, और नहीं करता है, तो मैं कर रहा हूँ गलत, यह भी एक जवाब है।

vec[col %in% vec[duplicated(vec$col),]$col] 

पता नहीं है जो एक है तेजी से, हालांकि, डाटासेट मैं वर्तमान में उपयोग कर रहा हूँ नहीं काफी बड़ा परीक्षण जो महत्वपूर्ण समय अंतराल का उत्पादन करना है।

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