2017-10-12 10 views
0

データセットに一連の変数を記録し、新たにコード化された変数にデータセットの接頭辞 "r_"を付けました。R:動的変数名の比較

tableをペアで実行して、記録が正しいことを確認します。 table(v1, r_v1)のようなものですが、私は多くの変数のためにそれを行う必要があります。彼らは特定の順序ではないので、私はインデックスを使用することができませんでした。

ここでは、使用できるデータの再現可能な例を示します(このコードを最適化するヒントもありがたいです)。

mtcars %>% select(c(disp,hp)) %>% 
mutate_all(funs(if_else(.>100,1,0))) %>% 
rename_(.dots=setNames(names(.), paste0('r_', names(.)))) %>% 
cbind(mtcars,.) 

+0

私はあなたのコードを実行すると、私は '「r_disp_r」'という名前の列になってしまうと、 '' r_hp_r "'と書いてありますが、 'r'接頭辞についてのみ話します。どちらが正しい? – Gregor

+0

2つの変数を 'mutate 'するために2行目を実行したとき、私はそれらにマーカーを与えて、それらが何であるか分かっていました。データセットの最後の2つの変数は最後の変数です。 – vashts85

+0

クリーンなバージョンのサンプルを提供するようにコードを更新しました。 – vashts85

答えて

1

私は変数名と単純なforループを使用します。あなたはその後、一度にcheck_list内容1を調べることができます変更されたデータdd

orig = c("disp", "hp") 
trans = paste0("r_", orig) 

check_list = list() 
for (i in seq_along(orig)) { 
    check_list[[i]] = table(dd[[orig[i]]], dd[[trans[i]]]) 
    # or whatever other check you want to do 
} 

check_list 

を呼び出します。あなたが開始したと整頓形式で物事を保つために

1

: ライブラリ(purrr) ライブラリ(tidyr)

mtcars %>% 
select(disp,hp) %>% 
mutate_all(funs(r = if_else(.>100,1,0))) %>% 
mutate(index = row_number()) %>% 
gather(key = key, value = value, -index) %>% 
separate(key, c("Variable", "Type")) %>% 
mutate(Type = ifelse(is.na(Type), "Original", "Recode")) %>% 
spread(key = Type, value = value) %>% 
select(-index) %>% 
split(.$Variable) %>% 
map(~ select(.,-Variable)) %>% 
map(~ table(.)) 
+0

私はここで 'index'や' gather'のようないくつかのコマンドに慣れていませんが、各行が何をしているのか教えてください。 – vashts85

+0

スプレッド機能を適用するには、各行に固有の識別子が必要です。これにより、すべてのデータがまとめられます。私は行番号の列を作成しましたが、任意のインデックスを構成することができます。 ギャザーは、行をワイドフォーマットからロングフォーマットに変換します。つまり、すべての列がキー値構造に変換されます。 'index'は' spread() '関数のために残す必要があるので、キー値の列とは別にしてください。 'spread()'行でパイプラインを実行して、観測ごとに変数ごとに1行ずつ、オリジナルとレコーディングを並べて表示します。 –