目标:我想找到一种方法来对字符向量进行分组,如:
x <- c("a800k blue 5", "a800j", "bb-blah5", "a800 7", "bb-blah2", "bb-blah3")
分组与#34;领先比赛&#34;提供最小元素,以便在grep
搜索中调用它们。所以上面玩具示例的解决方案是:
solution <- c("a800", "bb-blah")
因为grep
使用模式&#34; a800&#34;搜索x将产生以&#34; a800开头的所有3个元素。&#34;
注意:我可以对将包含在向量中的字符串做出很少的假设。只有几个和很长的字符串(可能是10个或更多)之间会有不同的长度,包含数字,字母,空格和一些使生活变得非常困难的特殊字符的组合。
所以我喜欢一个像intersect
这样的函数,可能会在每个单独的字符串上运行。
有什么想法吗?
答案 0 :(得分:0)
可能有更优雅(高效)的方式,但这适用于您的示例字符串。对字符串的成对组合(Biobase::lcPrefixC
)计算最长公共前缀(combn
*)。
source("https://bioconductor.org/biocLite.R")
biocLite("Biobase")
unique(combn(seq_along(x), 2, FUN = function(cm) lcPrefixC(x[cm])))
# [1] "a800" "" "bb-blah"
目前还不清楚您是否在前缀长度和组大小之间进行交易。例如:
x <- c("1234", "1235", "1245", "1246")
您是希望一个较大的组具有较短的前缀("12"
),还是两个较小的组具有较长的前缀("123"
和"124"
)?
*“lcPrefixC
是C中更快的实现。[但请注意]它只处理ascii字符”。另请参阅lcPrefix
。