给定一连串(部分)变量名,我想在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"
。
我该如何实现?
答案 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"