dplyr :: manip:如何使用字符串参数(持有colnames)而不是列名

时间:2014-08-01 07:44:48

标签: r dplyr

标题描述了我想要的东西:

而不是:

filter(mtcars, cyl == 8)

我想用:

var <- "cyl"
filter(mtcars, var == 8)  # pseudocode

就像

一样
mtcars[which(mtcars[,var]==8),]

我看到有类似的功能 starts_with() 但恕我直言,没有人真的适合上述相当简单的应用。

3 个答案:

答案 0 :(得分:3)

试试这个:

mtcars %>% do(filter(., .[[var]] == 8))

答案 1 :(得分:2)

eval(substitute(filter(mtcars, var == 8),list(var=as.name(var))))%>%
head(2)
#    mpg cyl disp  hp drat   wt  qsec vs am gear carb
# 1 18.7   8  360 175 3.15 3.44 17.02  0  0    3    2
# 2 14.3   8  360 245 3.21 3.57 15.84  0  0    3    4

filter(mtcars, get(var, envir=as.environment(mtcars)) == 8) #should also work but not recommended

答案 2 :(得分:0)

这是do.call的另一种方式:

do.call(filter, list(mtcars, bquote(.(as.name(var)) == 8)))