假设我有一个数据框
x1 <- c(1, 2, 3)
x2 <- c("a", "a", "c")
x3 <- c(10, 33, 45)
x <- data.frame(x1, x2, x3)
dimensions <- c("x1", "x2")
operators <- c(">", "==")
conditions <- c(1, "a")
理想情况下,输出应该等效于以下表达式
x.filtered <- which(x$x1 > 1 & x$x2 == "a")
如何使用“维度”,“运算符”和“条件”向量动态设置和评估上述表达式?
提前致谢。
答案 0 :(得分:2)
一种可能性:
expr <- paste(dimensions, operators, conditions, collapse=" & ")
expr <- gsub("(?<=(= ))(\\w+\\b)", "'\\2'", expr, perl=T)
# or
expr <- gsub("(?<=(= ))([^0-9[:punct:]]+\\b)", "'\\2'", expr, perl=T)
filter <- eval(parse(text=expr), envir=x)
# then if you really need it you can use which
which(filter)
答案 1 :(得分:0)
好的,经过一番摆弄,我找到了解决问题的方法
text1 = paste("x[", '"', dimensions[1],'"',"]", operators[1],'"',conditions[2],'"', sep="")
eval(parse(text = text1))
which(eval(parse(text = text1)))
我可以使用循环和intersect()来迭代每个条件。对此解决方案的任何其他改进都是最受欢迎的。
希望这有帮助!!!