2017-10-12 2 views
0

J'ai recodé un tas de variables dans un ensemble de données, et j'ai donné le préfixe "r_" aux variables nouvellement recodées dans mon ensemble de données.R: comparaisons de noms de variables dynamiques

Je voudrais exécuter table sur les paires pour m'assurer que le recodage était correct. Quelque chose comme table(v1, r_v1), mais je dois le faire pour beaucoup de variables. Ils ne sont pas dans un ordre particulier, donc je ne pouvais pas utiliser l'indexation.

Voici un exemple reproductible de données que l'on peut utiliser (également toutes les astuces pour optimiser ce code sont appréciées!).

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

Des idées?

+0

Quand je lance votre code, je me retrouve avec des colonnes nommées ' "r_disp_r"' et '" r_hp_r "', mais vous ne parlez que d'un préfixe 'r'. Qui est correct? – Gregor

+0

Eh bien, quand je lance la deuxième ligne pour «muter» les deux variables, je voulais leur donner un marqueur afin que je sache ce qu'ils étaient. Les deux dernières variables de l'ensemble de données sont les dernières. – vashts85

+0

Code mis à jour pour fournir une version plus propre de l'exemple. – vashts85

Répondre

1

Je voudrais simplement utiliser des noms de variables et simples pour la boucle. Appel des données modifiées 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 

Vous pouvez ensuite examiner les check_list contenu un à la fois.

1

Pour garder les choses dans le format bien rangé avec lequel vous avez commencé: bibliothèque (de purrr) bibliothèque (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

Je ne connais pas certaines commandes ici comme 'index' ou' gather', pouvez-vous me décrire ce que fait chaque ligne? – vashts85

+0

Vous avez besoin d'un identifiant unique pour chaque ligne afin d'appliquer la fonction de propagation. Cela garde toutes les données ensemble. Je viens de créer une colonne avec les numéros de ligne, mais vous pouvez créer un index arbitraire. Gather convertit la ligne du format large au format long. C'est-à-dire que toutes les colonnes sont transformées en une structure de valeurs-clés. Puisque le 'index' doit rester pour la fonction' spread() ', gardez-le séparé des colonnes de valeur-clé. Exécutez le pipeline à travers la ligne 'spread()' pour voir quels résultats: une ligne par variable par observation, avec original et recodé côte à côte. –