2016-01-19 7 views
5

आर में दो सूचियों को मिलान करें, आंशिक तारों वाला एक और दूसरा पूर्ण स्ट्रिंग वाला, मिलान के दौरान पूरी स्ट्रिंग को वापस कर दें। केवल अद्वितीय मिलान (एक बार) लौटें।दो सूचियों से मिलान करें, आंशिक तारों वाला एक और दूसरा पूर्ण स्ट्रिंग वाला, पूरे स्ट्रिंग को वापस करें यदि

तो, मान लें कि मेरे पास एक CSV फ़ाइल है और प्रत्येक पंक्ति में लंबी स्ट्रिंग (लंबी सूची) है। फिर, मैं substr का उपयोग कर स्ट्रिंग को छोटा करता हूं, और फिर मैं अद्वितीय का उपयोग करके किसी भी डुप्लिकेट स्ट्रिंग को छोड़ देता हूं। फिर मैं अनन्य छोटी सूची df14 के साथ लंबी स्ट्रिंग सूची df12 की तुलना करना चाहता हूं, और यदि आंशिक स्ट्रिंग खोज (df14 बनाम df12) पर अद्वितीय मिलान हैं, तो 0 स्ट्रिंग से पूरी स्ट्रिंग को df12 पर वापस करें।

यह वह जगह है df12 (लंबी स्ट्रिंग सूची)

[1] I like stackoverflow very much today 
    [2] I like stackoverflow much today 
    [3] I dont like stackoverflow very much today 
    [4] I dont like you! 
    [5] What? 

df13<-substr(df12, start=0, stop=30) 

यह df13 (छोटा तार - अद्वितीय नहीं) है

[1] I like stacko 
[2] I like stacko 
[3] I dont like s 
[4] I dont like y 
[5] What? 
df14<-unique(df13) 

यह वह जगह है df14 (छोटा तार - अद्वितीय तार अद्वितीय पद्धति लागू करने के बाद)

[1] I like stacko 
    [2] I dont like s 
    [3] I dont like y 
    [4] What? 

यह परिणाम है कि मैं अंत में चाहते है

[1] I like stackoverflow very much today 
    [2] I dont like stackoverflow very much today 
    [3] I dont like you! 
    [4] What? 
+0

'df13 <-substr (df12, start = 0, stop = 30) 'के लिए अपेक्षित आउटपुट का उत्पादन नहीं करता है। क्या यह 'df13 <-substr (df12, start = 0, stop = 13) होना चाहिए? – NGaffney

उत्तर

3

यह एक दृष्टिकोण df12 में सभी संभावित मिलान और उन्हें उत्पादन सूची में एक सूचकांक पता करने के लिए के रूप में कम स्ट्रिंग सहित, साथ df14 में हर छोटी स्ट्रिंग के मिलान है जो डीएफ 12:

df1 <- c('I like stackoverflow very much today', 'I like stackoverflow much today', 
     'I dont like stackoverflow very much today', 'I dont like you!', 
     'What?') 
df2 <- c('I like stacko', 'I dont like s', 'I dont like y', 'What?') 

sapply(df2, function(x) df1[grepl(x, df1)]) 
$`I like stacko` 
[1] "I like stackoverflow very much today" "I like stackoverflow much today"  

$`I dont like s` 
[1] "I dont like stackoverflow very much today" 

$`I dont like y` 
[1] "I dont like you!" 

$`What?` 
[1] "What?" 
+0

मुझे एक त्रुटि मिल रही है जो अवैध अमान्य अभिव्यक्ति, कारण 'गायब' कह रहा था) "' ... फिर आपके बहुत ही सुरुचिपूर्ण समाधान में जोड़ा गया "sapply (df2, function (x) df1 [grepl (x, df1, fixed = सही)] "" मैं सोच रहा हूं, क्या मैचों में से सबसे लंबा पाने का कोई तरीका है, यदि एक छोटी स्ट्रिंग के लिए एकाधिक स्ट्रिंग सूची में एकाधिक मिलान मौजूद हैं? –

+1

आप उपरोक्त 'sapply' कमांड का आउटपुट ले सकते हैं, इसे' l' कहने वाले किसी चीज़ पर सहेजें, और आप प्रत्येक कम स्ट्रिंग के लिए सबसे लंबी मिलान वाली लंबी स्ट्रिंग प्राप्त करने के लिए यह आदेश चला सकते हैं: 'lapply (l, function (एक्स) एक्स [nchar (x) == अधिकतम (nchar (x))]) – Gopala

+0

धन्यवाद @ user3949008! यह बहुत उपयोगी था! –

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