Tous,
J'ai une question que je crains d'être trop piétonne pour être posée ici, mais les recherches que j'ai effectuées ailleurs m'ont égaré. Il se peut que je n'utilise pas les bons termes de recherche.
J'ai un cadre de données de panel (pays-année) dans R avec quelques valeurs manquantes sur une variable donnée. J'essaie de les imputer avec la valeur d'un autre vecteur dans un autre cadre de données. Voici une illustration de ce que j'essaie de faire.
Supposons Data
est la base de données d'intérêt, qui contient des valeurs manquantes sur un vecteur donné que j'essaie d'imputer à partir d'une autre base de données de donneurs. Voici à quoi cela ressemble.
country year x
70 1920 9.234
70 1921 9.234
70 1922 9.234
70 1923 9.234
70 1924 9.234
80 1920 NA
80 1921 NA
80 1922 NA
80 1923 NA
80 1924 NA
90 1920 7.562
90 1921 7.562
90 1922 7.562
90 1923 7.562
90 1924 7.562
Il s'agirait de la Donor
qui a une valeur pour country == 80
country x
70 9.234
80 1.523
90 7.562
J'essaie de trouver un moyen transparent d'automatiser cela, au-delà d'une commande de Data$x[Data$country == 80] <- 1.523
. Il y a beaucoup de pays où l'on manque d'informations. x
.
Il peut être utile de préciser qu'un simple merge
serait le plus simple, mais pas nécessairement approprié à ce que j'essaie de faire. Dans certains pays, il y aura des variations sur les x
au cours des différentes années. En fait, ce que j'essaie d'accomplir, c'est une commande qui dit que si la valeur de x
est absente de Data
pour toutes les années pour un pays donné, prendre la valeur correspondante pour le pays à partir de l'indicateur Donor
et les coller sur toutes les années-pays comme une sorte de "meilleure estimation".
Merci de votre contribution. Je pense qu'il s'agit d'une question de débutant, mais je ne connaissais pas les bons termes pour la poser.
Le code reproductible pour les données ci-dessus est le suivant.
country <- c(70,70,70,70,70,80,80,80,80,80,90,90,90,90,90)
year <- c(1920,1921,1922,1923,1924,1920,1921,1922,1923,1924,1920,1921,1922,1923,1924)
x <- c(9.234,9.234,9.234,9.234,9.234,NA,NA,NA,NA,NA,7.562,7.562,7.562,7.562,7.562)
Data=data.frame(country=country,year=year,x=x)
summary(Data)
country <- c(70,80,90)
x <- c(9.234,1.523,7.562)
Donor=data.frame(country=country,x=x)
summary(Donor)