dplyr::manip:Como usar argumentos de string (mantendo nomes de colunas) em vez de nomes de colunas
Pergunta
O título descreve praticamente o que eu quero:
em vez de:
filter(mtcars, cyl == 8)
Eu gostaria de usar:
var <- "cyl"
filter(mtcars, var == 8) # pseudocode
Assim como
mtcars[which(mtcars[,var]==8),]
Vejo que existem funções comostarts_with()
mas IMHO nenhum é realmente adequado para a aplicação bastante simples acima.
Solução
Experimente isto:
mtcars %>% do(filter(., .[[var]] == 8))
Outras dicas
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
Aqui está mais uma maneira com do.call
:
do.call(filter, list(mtcars, bquote(.(as.name(var)) == 8)))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow