C'è un modo migliore per raggiungere questo obiettivo? Mi piacerebbe rimuovere tutte le stringhe da questo vettore, che sono sottostringhe di altri elementi.Rimuovere elementi di un vettore che sono sottostringhe di un altro
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"
Questo funziona, ma sembra eccessivo e mi interessa sapere un modo più elegante di farlo.
'CJ' è la molto più veloce' 'data.table' per expand.grid ' – jenesaisquoi
Volevo solo mettere un po 'di carne su questo per chiunque lo seguisse. 'CJ' è ** molto ** più veloce. Ho preso '12431' linee con una media di' 15.69' parole/linea per un insieme totale di '195065' parole e l'ho eseguito attraverso' system.time (dt <- setDT (expand.grid (word1 = words, word2 = words , stringheAsFactors = FALSE))) 'in' sistema utente trascorso 8.414 3.387 13.854' ancora 'system.time (dt1 <- CJ (words, words, unique = TRUE))' in 'sistema utente trascorso 0.932 0.365 1.320'. differenza di ordine di grandezza. –
Impressionante, grazie per il benchmark –