2013-04-28 7 views
8

मैं उन सभी पंक्तियों की पहचान करने की कोशिश कर रहा हूं जो मैट्रिक्स में दो या अधिक का प्रतिनिधित्व करते हैं।डुप्लिकेट की पहचान करें और पहली घटना को चिह्नित करें और अन्य सभी

उदाहरण के लिए:

m <- matrix(c(1,2,1,3,1,4,1,2,2,3,2,3,1,2,5), ncol = 3) 
m 
duplicated(m[,1]) 

आउटपुट:

 [,1] [,2] [,3] 
[1,] 1 4 2 
[2,] 2 1 3 
[3,] 1 2 1 
[4,] 3 2 2 
[5,] 1 3 5 

[1] FALSE FALSE TRUE FALSE TRUE 

हालांकि, मैं नहीं चाहता कि कि उत्पादन करना चाहते हैं। मैं चाहता हूँ:

[1] TRUE FALSE TRUE FALSE TRUE 

के बाद से पंक्ति [1,1] के मूल्य मीटर के स्तंभ में 3 बार प्रकट होता है 1.

उत्तर

13

जब मैं इस सवाल को देखा मैंने खुद से पूछा "जिम होल्टमैन या बिल डनलप क्या रेलप पर सलाह देंगे?"। अभिलेखागार में नहीं देखा है, लेकिन मुझे लगता है कि उन्होंने duplicated के दो "समांतर" अनुप्रयोगों का उपयोग करके सलाह दी होगी, एक डिफ़ॉल्ट और एक से पहले पैरामीटर के साथ और एक वेक्टर या ऑपरेटर के साथ जुड़ने के साथ।

duplicated(m[,1]) | duplicated(m[,1], fromLast=TRUE) 
[1] TRUE FALSE TRUE FALSE TRUE 
+2

यह 'डुप्लीकेट()' का पैरामीटर होना चाहिए ताकि हम इस तरह के एक ठोस आदेश के साथ समाप्त न हों। –

+1

मुझे यकीन नहीं है कि भाषा के संशोधन के लिए यह सही जगह है। एक और विकल्प 'm [, 1]%% डुप्लिकेट में हो सकता है (एम [, 1])'। क्या यह आपके लिए अधिक प्राकृतिक प्रतीत होता है? –

2

यहाँ कई में से एक तरीका है:

m <- matrix(c(1,2,1,3,1,4,1,2,2,3,2,3,1,2,5), ncol = 3) 

x <- table(m[,1]) 
as.character(m[,1]) %in% names(x)[x > 1] 

## > as.character(m[,1]) %in% names(x)[x > 1] 
## [1] TRUE FALSE TRUE FALSE TRUE 

# or wrap it up as function: 

FUN <- function(vec) { 
    x <- table(vec) 
    as.character(vec) %in% names(x)[x > 1] 
} 

FUN(m[, 1]) 

## > FUN(m[, 1]) 
## [1] TRUE FALSE TRUE FALSE TRUE 
+0

क्या कॉल करने के लिए कॉल का कोई कारण है? – Dason

+0

हां मैंने 'राले' का उपयोग करके शुरू किया और इसके खिलाफ फैसला किया। तो हाँ लेकिन अब नहीं। मैंने इसे प्रतिक्रिया से हटा दिया। –

+0

सहायता के लिए धन्यवाद। मैंने दोनों की कोशिश की और वे दोनों सफलतापूर्वक काम किया। – jeffRey

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