有一个字符串向量列表:
xx <- c("concord wanderer basic set air snug beige",
"concord wanderer basic set air snug black noir",
"concord wanderer basic set air snug blue bleu",
"concord wanderer basic set air snug brown marron",
"concord wanderer basic set air snug green vert",
"concord wanderer basic set air snug grey gris",
"concord wanderer basic set air snug red rouge",
"concord wanderer basic set air snug rose" )
我试图获得向量元素之间的最小共享部分,例如,我应该得到:
"concord wanderer basic set air snug"
xx是前一个过程的结果,因此我确信元素之间存在共享部分。但被删除的部分并不总是在他的结尾。
使用strsplit
和`table
我得到了这个部分解决方案,但它有点棘手,我放弃了原来的单词顺序:
table_x <- table(unlist(strsplit(xx,' ')))
paste(names(table_x[table_x==max(table_x)]),collapse=' ')
[1] "air basic concord set snug wanderer"
我很确定有更好的解决方案。我尝试使用agrep
或adist
,但没有取得多大成功。
答案 0 :(得分:6)
您可以使用intersect
和Reduce
来获得所需的输出。
paste(Reduce(intersect, strsplit(xx, " ")), collapse=" ")
#[1] "concord wanderer basic set air snug"