【发布时间】:2015-10-18 19:14:58
【问题描述】:
有没有更好的方法来实现这一点?我想从这个向量中删除所有字符串,它们是其他元素的子字符串。
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比data.table快得多expand.grid -
只是想在这上面放点肉给任何跟进的人。
CJ快得多。我将12431行与15.69字/行的平均值合并为一组195065字,然后在user system elapsed 8.414 3.387 13.854中通过system.time(dt <- setDT(expand.grid(word1 = words, word2 = words, stringsAsFactors = FALSE)))在user system elapsed 0.932 0.365 1.320中运行system.time(dt1 <- CJ(words,words,unique = TRUE))。数量级差异。 -
太棒了,感谢基准测试