我有两个字符串向量,我需要通过部分匹配另一个向量来排序一个向量。向量看起来像这样:
因此,我需要获取第一个向量的每个元素,并在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
,这是找到匹配项的地方,而无需我进行排序。
任何建议将不胜感激。
答案 0 :(得分:1)
这是使用grep
和sapply
的一种方法:
samples$mouse[sapply(samples$groups, function(x) { grep(x, samples$mouse) })]
关于第一个参数,grep
基本R函数未向量化,因此我们无法馈入整个groups
向量。相反,我们可以使用sapply
在路径mouse
的向量中找到匹配的索引。