在具有部分匹配的data.frame中查找名称,需要对它们进行排序

时间:2019-04-04 14:24:36

标签: r

给定一连串(部分)变量名,我想在data.frame中查找变量的索引。一个例子:

df <- data.frame(var = c("az","bz","cz"), stringsAsFactors = FALSE)

现在我得到的链为:

v <- c("a > b")

我现在正在data.frame中搜索与 sorted 相对应的变量名称。

我这样做是:

df$var[grep(paste(trimws(unlist(strsplit(v, ">"))), collapse = "|"), df$var)]
[1] "az" "bz"

这在第一个示例中有效。对于第二个示例,此操作失败:

v <- c("b > a")
df$var[grep(paste(trimws(unlist(strsplit(v, ">"))), collapse = "|"), df$var)]
[1] "az" "bz"

它返回[1] "az" "bz",而我希望[1] "bz" "az"

我该如何实现?

1 个答案:

答案 0 :(得分:2)

如果您不通过正则表达式(b|a)进行操作,而是将它们保留为向量,因为它是从strsplit()函数(即c(2,1))派生的,则可以循环并使用grep,您将获得正确的订单,即

df$var[sapply(trimws(unlist(strsplit(v, ">"))), function(i)grep(i, df$var))]
#[1] "bz" "az"