Użycie R do wstawienia wartości dla brakujących danych z wartością z innej ramki danych

Wszystko,

Mam pytanie, które, jak się obawiam, może być zbyt trudne do spytania, ale szukanie go gdzie indziej prowadzi mnie na manowce. Być może nie korzystam z odpowiednich haseł wyszukiwania.

Mam ramkę danych panelu (kraj-rok) w R z pewnymi brakującymi wartościami w danej zmiennej. Próbuję przypisać im wartość z innego wektora w innej ramce danych. Oto ilustracja tego, co próbuję zrobić.

ZałożyćData jest interesującą ramką danych, która ma brakujące wartości w danym wektorze, które próbuję przypisać z innej ramki danych dawcy. To wygląda tak.

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

To byłobyDonor ramka, która ma wartośćcountry == 80

country      x
  70       9.234
  80       1.523
  90       7.562

Próbuję znaleźć płynny sposób na zautomatyzowanie tego, poza poleceniemData$x[Data$country == 80] <- 1.523. Istnieje wiele krajów, w których brakujex.

Warto wyjaśnić, że to prostemerge byłby najłatwiejszy, ale niekoniecznie odpowiedni do tego, co próbuję zrobić. Niektóre kraje zobaczą zmianyx w różnych latach. Zasadniczo to, co próbuję osiągnąć, to polecenie, które mówi, że jeśli wartośćx brakujeData przez wszystkie lata dla danego kraju, weź odpowiednią wartość dla kraju zDonor dane i wklej je przez wszystkie lata w kraju jako „najlepsze odgadnięcie”.

Dzięki za każde wejście. Podejrzewam, że jest to pytanie debiutanta, ale nie znałem odpowiednich terminów, aby go znaleźć.

Powtarzalny kod powyższych danych.

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)

questionAnswers(2)

yourAnswerToTheQuestion