2017-12-21 12 views
1

データセットをクリーニングしており、多くの因子変数を再コード化する必要があります。これを行う関数を作成するのにrlangmapを使用したいと思います。私のサンプルデータセットとコードは以下の通りです。私はほとんどそれを持っていると思うが、私は完全に把握していないのでおそらく、バグを把握することができませんrlangrlangとmapを使用して多くの変数を再コード化するR

の作業データセット:ここ

df1 <- tribble(
~var1, ~var2, ~var3, 
"1", "1", "1", 
"2", "2", "2", 
"3", "3", "3" 
) 

が、私は単一の変数(と私は希望の結果を)再コーディングする方法を次のとおりです。ここで

df1 <- df1 %>% 
    mutate(var1 = fct_recode(var1, 
          "0" = "1", 
          "1" = "2", 
          "2" = "3")) 

は私の作業コードです:

recode = function(...){ 
    mutate_quo = quos(...) 

    map(mutate_quo, ~{ 
    df1 <- df1 %>% 
     mutate(!!.x = fct_recode(!!.x, 
         "0" = "1", 
         "1" = "2", 
         "2" = "3")) 
    }) 
} 

これにより、次のエラーが発生します。

Error: unexpected '=' in: 
" df1 <- df1 %>% 
    mutate(!!.x =" 
>        "0" = "1", 
Error: unexpected ',' in "        "0" = "1"," 
>        "1" = "2", 
Error: unexpected ',' in "        "1" = "2"," 
>        "2" = "3")) 
Error: unexpected ')' in "        "2" = "3")" 
> }) 
Error: unexpected '}' in " }" 
> } 
Error: unexpected '}' in "}" 

!!を削除すると、関数がコンパイルされます。私はその後、recode("var1")を使用して、それを呼び出すようにしようとすると、しかし、私は次のエラーを取得する:

Error in mutate_impl(.data, dots) : 
Evaluation error: `f` must be a factor (or character vector).. 

私が機能を持っており、そしてちょうどrecode(var1, var2, var3)を実行したいと思います。

+0

なぜ 'mutate_all(DF1、〜fct_recode(。、 "0"= "1"、 "1"= "2"、 "2"= "3"))' – Nate

+0

私は本当のデータセット私がmutateを介してコード化したいと思わない他の何百もの変数があります。 – scottsmith

+1

'mutate_at'または' mutate_if'を使って、選択した列だけを変更することができます。 – eipi10

答えて

0

@ epi10による提案を使用して、これは動作しますが、rlangまたはmapは使用しません。

df1 <- df1 %>% 
    mutate_at(vars(var1, var2, var3), 
     function(x) case_when(x <= 1 ~ 0, 
           x <= 2 ~ 1, 
           x <= 3 ~ 2)) 
関連する問題