2016-03-15 1 views
1

J'ai un jeu de données longitudinales qui contient des informations pour jusqu'à 59 emplois pour chaque répondant. Je suis intéressé par les questions suivantes:Création d'une nouvelle variable par recodage conditionnel basé sur plusieurs variables dans R

REASON LEFT JOB IF NOT CURRENTLY WORKING JOB 01 2012 
REASON LEFT JOB IF NOT CURRENTLY WORKING JOB 02 2012 
. 
. 
. 

Chacun a 25 choix différents, dont je suis seulement intéressé par les trois premiers (1-Licenciement, 2-Société fermée, 3 Fin du travail temporaire). Je veux recoder ces 59 variables en 1 variable, donc si quelqu'un a perdu son travail en raison de la fermeture de l'entreprise ou de la mise à pied (quel que soit le numéro du travail, je veux le coder comme 0, et si veux recoder comme 1.) Je peux écrire:

Jobloss[Job1==1|Job1==2|Job2==1|Job2==2]<-0 
Jobloss[Job1==3|Job2==3]<-1 

il serait facile si je n'avais que deux variables pour perte d'emploi; mais j'ai 59. Existe-t-il un court chemin pour dire à R de coder la nouvelle variable comme 0, si l'une de ces variables/colonnes (c (1:59)) == 1 ou == 2.

Je dois l'utiliser non seulement pour la perte de travail, mais aussi pour d'autres questions; donc cette commande pourrait économiser beaucoup d'heures pour moi. J'apprécierais vraiment si vous pouviez aider. Merci

Répondre

0

Vous pouvez utiliser apply sur les lignes pour vérifier si l'une des colonnes est inférieure à 3. Voir le code ci-dessous pour un exemple.

df <- data.frame(Job1 = sample(1:3, 100, TRUE), 
       Job2 = sample(1:3, 100, TRUE), 
       Job3 = sample(1:3, 100, TRUE)) 
df$Jobloss <- as.numeric(apply(df, 1, function(z) any(z < 3))) 

df 
+0

Merci pour votre aide :) –

-1

Vous pouvez écrire une fonction qui effectue les calculs que vous demandez, créez une nouvelle trame de données en appliquant cette fonction à travers les colonnes de votre trame de données, puis de mesurer les lignes ont une colonne supérieure à 0. En dessous , my_df devrait être une trame de données qui contient seulement les 59 variables sur les emplois des individus. Vous pouvez également le sous-utiliser pour les variables de la ligne avec la fonction apply. J'ai supposé que vous vouliez que tout ce qui n'est pas 1, 2 ou 3 soit marqué comme NA. Je supposais que vous vouliez autre chose que 1, 2 ou 3. Si ce n'est pas le cas, vous devrez ajuster la première ligne de la fonction.

+0

Merci beaucoup! Cela a fonctionné :) –

+0

Oh réellement désolé, ceci crée des 0, pas NA pour autre chose que my_var == 3. Je veux NA pour tout le reste, à la place. Il y a déjà des NA dans les données et il y a d'autres choix de réponses pour les exemples 4, 5, etc. Je veux que NA soit autre chose que 1, 2 ou 3. –