Je travaille sur un ensemble de données contenant des informations sur le lieu de résidence et la profession des individus. À l'origine, il est dit que quelqu'un réside à une adresse d'un an à un an, par ex. de 1920 à 1925. Si la personne a déménagé à cette adresse en 1920, il y a une variable muette avec la valeur 1. De même, si la personne a déménagé de cette adresse en 1925, il y a aussi une variable muette avec la valeur 1.

Maintenant, le problème est que lorsque je désemboîte le "d'une année à l'autre", il y aura une valeur de 1 pour toutes les observations, à la fois déplacées et emménagées, de 1920 à 1925.

Exemples de données:

library(tidyr)
library(dplyr)

individual <- c('John Doe','Peter Gynn','Jolie Hope', 'Jolie Hope')
occupation <- c('banker', 'butcher', 'clerk', 'clerk')
first_obs <- c(1920, 1920, 1920, 1925)
last_obs <- c(1925, 1925, 1925, 1926)
moved_in <- c(1, 0, 1, 1)
moved_out <- c(0, 0, 1, 0)
address <- c('king street', 'market street', 'montgomery road', 'princes ave')


df <- data.frame(individual, occupation, address, first_obs, last_obs, moved_in, moved_out)

df$year <- mapply(seq,df$first_obs,df$last_obs,SIMPLIFY=FALSE)


new_df <- df %>% 
  unnest(year) %>% 
  select(-first_obs,-last_obs)

Comme vous pouvez le voir, il semble que Jolie Hope, par exemple, ait emménagé et déménagé de son adresse chaque année entre 1920 et 1925, mais elle aurait emménagé en 1920 et a déménagé en 1925. Existe-t-il une solution pour cela ?

De plus, j'ai quelques problèmes avec les valeurs dupliquées en raison du fait que des personnes entrent et sortent la même année. Par exemple, Jolie Hope a déménagé de Mongomery Road en 1925 et a emménagé à Princes Avenue en 1925. Je pense que la meilleure solution serait de n'utiliser que la ligne "emménagé". Est-il possible de supprimer systématiquement toutes les lignes "déplacées" où il y a des valeurs en double ?

0
johnny 10 févr. 2020 à 12:00

1 réponse

Meilleure réponse

Nous pouvons group_by chacun des individual et leurs address et attribuer 1 if au premier year lorsqu'ils ont emménagé et 1 au dernier year lorsqu'ils ont déménagé.

library(dplyr)

df %>% 
  tidyr::unnest(year) %>% 
  select(-first_obs,-last_obs) %>%
  group_by(individual, address) %>%
  mutate(moved_in = if (any(moved_in == 1)) replace(moved_in, 
                    row_number() != 1, 0) else moved_in, 
         moved_out = if (any(moved_out == 1)) replace(moved_out, 
                     row_number() != n(), 0) else moved_out)

#   individual occupation address         moved_in moved_out  year
#   <fct>      <fct>      <fct>              <dbl>     <dbl> <int>
# 1 John Doe   banker     king street            1         0  1920
# 2 John Doe   banker     king street            0         0  1921
# 3 John Doe   banker     king street            0         0  1922
# 4 John Doe   banker     king street            0         0  1923
# 5 John Doe   banker     king street            0         0  1924
# 6 John Doe   banker     king street            0         0  1925
# 7 Peter Gynn butcher    market street          0         0  1920
# 8 Peter Gynn butcher    market street          0         0  1921
# 9 Peter Gynn butcher    market street          0         0  1922
#10 Peter Gynn butcher    market street          0         0  1923
#11 Peter Gynn butcher    market street          0         0  1924
#12 Peter Gynn butcher    market street          0         0  1925
#13 Jolie Hope clerk      montgomery road        1         0  1920
#14 Jolie Hope clerk      montgomery road        0         0  1921
#15 Jolie Hope clerk      montgomery road        0         0  1922
#16 Jolie Hope clerk      montgomery road        0         0  1923
#17 Jolie Hope clerk      montgomery road        0         0  1924
#18 Jolie Hope clerk      montgomery road        0         1  1925
#19 Jolie Hope clerk      princes ave            1         0  1925
#20 Jolie Hope clerk      princes ave            0         0  1926

Pour résoudre le problème des valeurs dupliquées, je pense qu'il est préférable de conserver une ligne dupliquée avec la même année indiquant qu'ils ont quitté l'ancienne adresse et emménagé à une nouvelle adresse la même année.

0
Ronak Shah 10 févr. 2020 à 09:47