Uso de R para insertar un valor para los datos faltantes con un valor de otro marco de datos
Todos,
Tengo una pregunta que me temo que podría ser demasiado pedestre para preguntar aquí, pero buscarla en otro lugar me está desviando. Puede que no esté usando los términos de búsqueda correctos.
Tengo un marco de datos de panel (país-año) en R con algunos valores faltantes en una variable dada. Estoy tratando de imputarlos con el valor de otro vector en otro marco de datos. Aquí hay una ilustración de lo que estoy tratando de hacer.
AsumirData
es el marco de datos de interés, que tiene valores faltantes en un vector dado que estoy tratando de imputar de otro marco de datos de donantes. Se parece a esto.
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
Este seria elDonor
marco, que tiene un valor paracountry == 80
country x
70 9.234
80 1.523
90 7.562
Estoy tratando de encontrar una manera perfecta de automatizar esto, más allá de un comando deData$x[Data$country == 80] <- 1.523
. Hay muchos países con faltantes enx
.
Vale la pena aclarar que un simplemerge
Sería lo más fácil, pero no necesariamente apropiado para lo que estoy tratando de hacer. Algunos países verán variación enx
durante diferentes años Básicamente, lo que estoy tratando de lograr es un comando que dice que si el valor dex
falta enData
para todos los años para un país determinado, tome el valor correspondiente para el país delDonor
datos y pégalos en todos los años del país como una de las "mejores suposiciones".
Gracias por cualquier entrada. Sospecho que esta es una pregunta de novato, pero no sabía los términos correctos para buscarla.
A continuación se muestra un código reproducible para los datos anteriores.
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)