2017-11-20 31 views
1

1つの列(質問)が動的な2つの列(var 1と​​question)でcountを使用しようとしています。以下のコードは、変数名に空白が含まれていないときに動作していましたが、空白が含まれているためエラーがあります。R dplyr動的列選択

df <- data.frame(`var 1` = c('a','b'), 
       `var 2` = c('a','b'), 
       `var 3` = c('a','b'), 
       `var 4` = c('a','b') 

) 

question <- 'var 3' 

dfDynamic <- df %>% count_(vars = c('var 1', question)) 

私が手にエラーは次のとおりです。

Error in parse(text = x) : <text>:1:5: unexpected numeric constant 
1: var 1 

は、私はこの問題を解決することができます方法はありますか?

答えて

0

動的カラム名を扱う公式の方法である "quasiquotation"を使用して修正できます。

例:

df <- data.frame(`var 1` = c('a','b'), 
       `var 2` = c('a','b'), 
       `var 3` = c('a','b'), 
       `var 4` = c('a','b') 

) 

# Does not work: 
question <- 'var 3' 
dfDynamic <- df %>% count_(vars = c('var 1', question)) 


# Try this instead: 

# "quote" the column name -In dplyr lingo, create a "quosure" 
question <- quo('var 3') 

# Notice that you don't need to use "count_" anymore, 
# just invoke the quoted column name with "!!" 
dfDynamic <- df %>% count('var 1', !!question) 


dfDynamic 

あなたが買ってあげる:http://dplyr.tidyverse.org/articles/programming.html

:ここ
# A tibble: 1 x 3 
    `"var 1"` `"var 3"`  n 
     <chr>  <chr> <int> 
1  var 1  var 3  2 

もquasiquotationの背後にあるロジックを説明してより多くの例とチュートリアル、です