【问题标题】:Order one vector of strings by partial match of the other通过另一个字符串的部分匹配来排序一个字符串向量
【发布时间】:2018-11-06 01:54:39
【问题描述】:

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

因此,我需要获取第一个向量的每个元素并在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,这只是在没有我需要的排序的情况下找到匹配项的位置。

任何建议将不胜感激。

【问题讨论】:

  • 请不要发布代码/数据/错误的图像:它不能被复制或搜索 (SEO),它会破坏屏幕阅读器,并且它可能不适合某些移动设备。参考:meta.stackoverflow.com/a/285557/3358272

标签: r string-matching


【解决方案1】:

这是使用grepsapply 的一种方法:

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

grep 基本 R 函数没有针对第一个参数进行向量化,因此我们无法输入整个 groups 向量。相反,我们可以使用sapply 来查找mouse 路径向量中的匹配索引。

【讨论】:

  • 我需要通过与paste0(samples$groups, samples$mouse) 一个匹配来订购names 向量
  • 答案很好,只是应该更正数组名称以与问题同步
猜你喜欢
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多