Gibt es eine bessere Möglichkeit, dies zu erreichen? Ich möchte alle Zeichenfolgen aus diesem Vektor entfernen, die Teilzeichenfolgen anderer Elemente sind.Entfernen Sie Elemente eines Vektors, die Teilzeichenfolgen eines anderen sind
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"
Dies funktioniert, aber es scheint, wie viel des Guten und ich bin daran interessiert, eine elegantere Art und Weise zu tun, es zu wissen.
'CJ' die viel schneller ist' data.table' für 'expand.grid ' – jenesaisquoi
Ich wollte nur etwas Fleisch darauf legen für jeden, der weiter verfolgt. 'CJ' ist ** viel ** schneller. Ich nahm '12431' Zeilen mit einem Durchschnitt von' 15.69' Wörtern/Zeile für eine Gesamtmenge von '195065' Wörtern und führte sie durch' system.time (dt <- setDT (expand.grid (word1 = words, word2 = words , stringsAsFactors = FALSE))) 'in' Benutzersystem abgelaufen 8.414 3.387 13.854' noch' system.time (dt1 <- CJ (Wörter, Wörter, unique = TRUE)) 'in' Benutzersystem abgelaufen 0.932 0.365 1.320'. Größenordnung Unterschied. –
Super, danke für den Benchmark –