通过部分匹配另一个字符串来排序一个向量

时间:2018-11-06 01:54:39

标签: r string-matching

我有两个字符串向量,我需要通过部分匹配另一个向量来排序一个向量。向量看起来像这样:

enter image description here

因此,我需要获取第一个向量的每个元素,并在names中找到其位置,以使两个向量的顺序相同。例如,GF1应该是第一个向量中的9th元素。一旦知道订购顺序,我就会知道如何订购商品。我尝试了match函数,但是返回NAs却无法正常工作:

names_order <- match(paste0(samples$groups, samples$mouse), names)

我也尝试了pmatch,但没有成功。可能是因为match搜索完整匹配项。 Grepl函数也不起作用:

grep(paste0(paste0(samples$groups, samples$mouse), collapse = '|'), names, value = TRUE)

仅返回[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16,这是找到匹配项的地方,而无需我进行排序。

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

这是使用grepsapply的一种方法:

samples$mouse[sapply(samples$groups, function(x) { grep(x, samples$mouse) })]

关于第一个参数,grep基本R函数未向量化,因此我们无法馈入整个groups向量。相反,我们可以使用sapply在路径mouse的向量中找到匹配的索引。