R: substitua NA pelo item do vetor

stou tentando substituir alguns valores ausentes nos meus dados pelos valores médios de um grupo semelhant

Meus dados são assim:

   X   Y
1  x   y
2  x   y
3  NA  y
4  x   y

E eu quero que fique assim:

  X   Y
1  x   y
2  x   y
3  y   y
4  x   y

Eu escrevi isso, e funcionou

for(i in 1:nrow(data.frame){
   if( is.na(data.frame$X[i]) == TRUE){
       data.frame$X[i] <- data.frame$Y[i]
   }
  }

Mas meu data.frame tem quase meio milhão de linhas e as instruções for / if são bem lentas. O que eu quero é algo como

is.na(data.frame$X) <- data.frame$Y

Mas isso gera um erro de tamanho incompatível. Parece que deve haver um comando que faça isso, mas não consigo encontrá-lo aqui no SO ou na lista de ajuda do R. Alguma ideia

questionAnswers(3)

yourAnswerToTheQuestion