dplyr::manip:Como usar argumentos de string (mantendo nomes de colunas) em vez de nomes de colunas

StackOverflow https://stackoverflow.com//questions/25075312

  •  26-12-2019
  •  | 
  •  

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.

Foi útil?

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
scroll top