के सबस्ट्रिंग हैं, क्या इसे प्राप्त करने का कोई बेहतर तरीका है? मैं इस वेक्टर से सभी तारों को हटाना चाहता हूं, जो अन्य तत्वों के सबस्ट्रिंग्स हैं।एक वेक्टर के तत्व निकालें जो अन्य
words = c("please can you",
"please can",
"can you",
"how did you",
"did you",
"have you")
> words
[1] "please can you" "please can" "can you" "how did you" "did you" "have you"
library(data.table)
library(stringr)
dt = setDT(expand.grid(word1 = words, word2 = words, stringsAsFactors = FALSE))
dt[, found := str_detect(word1, word2)]
setdiff(words, dt[found == TRUE & word1 != word2, word2])
[1] "please can you" "how did you" "have you"
यह काम करता है, लेकिन यह ओवरकिल जैसा लगता है और मुझे इसे करने का एक और शानदार तरीका जानने में दिलचस्पी है।
'CJ' बहुत तेजी से' 'expand.grid के लिए data.table' है ' – jenesaisquoi
बस इस पर कुछ मांस डालने के लिए कुछ मांस रखना चाहता था। 'सीजे' ** ** ** तेज है। मैंने '1 9 5065' शब्दों के कुल सेट के लिए '15.631' शब्दों के औसत के साथ '12431' लाइनें लीं और इसे 'system.time (dt <- setDT (expand.grid (word1 = words, word2 = शब्द के माध्यम से चलाया , स्ट्रिंग्सएफ़ैक्टर्स = गलत))) 'यूजर सिस्टम में' 8.414 3.387 13.854' अभी तक 'system.time (डीटी 1 <- सीजे (शब्द, शब्द, अद्वितीय = सही)) '' यूजर सिस्टम में 0.932 0.365 1.320' से गुजर गया। परिमाण अंतर का क्रम। –
बहुत बढ़िया, बेंचमार्क –