J'utilise un panel de données où les individus sont suivis dans le temps. Je veux vérifier si les répondants ont changé leurs réponses d'un an par rapport à un autre. Par exemple, la variable de genre ci-dessous représente 1 pour l'homme et 0 pour la femme. La personne avec ID 1 a changé sa réponse d'homme à femme entre 2005 et 2006.

Comme j'ai des millions de personnes dans mon data.frame, j'aimerais créer une variable qui me donne la valeur de 9 pour les répondants qui ont changé leur réponse au fil du temps et une valeur de 8 pour les répondants qui ont eu une réponse constante. Quelqu'un pourrait-il me guider un peu comment y parvenir en utilisant dplyr?

id  year    unemployment       change
1   2005        1                 9
1   2006        0                 9
1   2007        0                 9
2   2007        1                 8
2   2008        1                 8

structure(list(id = structure(c(1, 1, 1, 2, 2), format.stata = "%9.0g"), 
    year = structure(c(2005, 2006, 2007, 2007, 2008), format.stata = "%9.0g"), 
    unemployment = structure(c(1, 0, 0, 1, 1), format.stata = "%9.0g"), 
    change = structure(c(9, 9, 9, 8, 8), format.stata = "%9.0g")), row.names = c(NA, 
-5L), class = c("tbl_df", "tbl", "data.frame"))
0
Jad 16 nov. 2020 à 20:37

1 réponse

Meilleure réponse

Si nous supposons que nous devons détecter un changement dans le chômage, et non dans le sexe, nous pouvons utiliser quelque chose comme :

d %>% 
  group_by(id) %>% 
  mutate(change = ifelse(n_distinct(unemployment) == 1, 8, 9))

Cependant, je ne recommanderais pas d'utiliser des valeurs comme 8 et 9 pour coder une telle variable de changement car elle ne peut pas être facilement comprise.

1
Axeman 16 nov. 2020 à 17:47