11
votes

Recoder / Penter Conforme des données. Facteurs de caractères avec différents niveaux

Chaque fois que je dois recoder un ensemble de variables, j'ai la fonction de recoder des SPSS. Je dois admettre que c'est assez simple. Il y a une fonction similaire Fonction dans voiture de la voiture , et cela fait le tour, mais présuppose que je veux faire effectuer les choses avec facteur . < p> j'ai data.frame avec plusieurs variables avec une plage de valeur de 1 à 7. Je souhaite "inverser" les valeurs variables, en remplacement des 1s avec 7s, 2s avec 6s, 3s avec 5s, 3s avec 5s, 3s avec 5s, 3s avec 5s, 3 Peut utiliser le facteur fonction: xxx

et si je cours: xxx

problème commence quand Je veux recoder des facteurs qui n'ont pas de niveaux égaux. Si un facteur, z, a des niveaux c ("1", "3", "4", "6", "7") , est-ce que je peux "inverser" les niveaux de "inverser" 1 = 7, 2 = 6, 3 = 5, etc. en utilisant le facteur Fonction

Autres fonctions de recode efficaces devrait suffire!


0 commentaires

4 Réponses :


3
votes

Oui, il suffit d'assigner à niveaux : xxx


1 commentaires

Il semble que je n'étais pas tout à fait concis avec ma question. Si j'ai des niveaux "incomplets", par exemple C ("2", "4", "5", "6") en les inversant que je vais obtenir c ("6", "5", "4", "2"), et je ne veux pas pour faire ça. Je veux remplacer les valeurs / les niveaux de sorte que 1 = 7, 2 = 6, 3 = 5, et vice versa. Est-ce que cela possible avec la fonction facteur / niveau, ou dois-je utiliser une voiture :: Recode () ??



8
votes

Vous devez fournir des niveaux argument sur facteur (comme Dirk a écrit): xxx

Vous pouvez le faire sur le facteur existant aussi xxx

Comme vous le voyez, les niveaux ont été étendus dans la commande désir.


1 commentaires

Merci pour celui-ci! Il semble que je sois trop fatigué et que je manque l'évidence. La solution était si simple ... merci encore une fois!



2
votes

Si vous remplissez les niveaux de facteur, vous êtes prêt à partir:

df <- data.frame(x=factor(c(2,4,5,6)))
df$x <- factor(df$x, levels = 7:1)
table(df$x)

7 6 5 4 3 2 1 
0 1 1 1 0 1 0 


0 commentaires

1
votes

Dans ce cas, puisque vous avez des chiffres, pourquoi ne pas simplement transformer les chiffres à l'aide de l'arithmétique modulaire?

EG P>

levels(x) <- as.character((6*as.numeric(levels(x)))%%7+1)


2 commentaires

Opérateur de modulus (reste), similaire à% en C / Java, etc., bien que je pense que les valeurs négatives soient traitées différemment.


Intéressant ... je vais essayer!