Como substituir os valores de NA em uma tabela * para colunas selecionadas *? data.frame, data.table

Há muitos posts sobre como substituir os valores de NA. Estou ciente de que alguém poderia substituir NAs na seguinte tabela / frame com o seguinte:

x[is.na(x)]<-0

Mas, e se eu quiser restringi-lo apenas a certas colunas? Deixe-me mostrar um exemplo.

Primeiro, vamos começar com um conjunto de dados.

set.seed(1234)
x <- data.frame(a=sample(c(1,2,NA), 10, replace=T),
                b=sample(c(1,2,NA), 10, replace=T), 
                c=sample(c(1:5,NA), 10, replace=T))

Que dá:

    a  b  c
1   1 NA  2
2   2  2  2
3   2  1  1
4   2 NA  1
5  NA  1  2
6   2 NA  5
7   1  1  4
8   1  1 NA
9   2  1  5
10  2  1  1

Ok, só quero restringir a substituição às colunas 'a' e 'b'. Minha tentativa foi:

x[is.na(x), 1:2]<-0

e:

x[is.na(x[1:2])]<-0

Que não funciona.

Minha tentativa de data.table, ondey<-data.table(x), obviamente, nunca iria funcionar:

y[is.na(y[,list(a,b)]), ]

Eu quero passar colunas dentro do argumento is.na, mas isso obviamente não funcionaria.

Eu gostaria de fazer isso em um data.frame e um data.table. Meu objetivo final é recodificar o 1: 2 para 0: 1 em 'a' e 'b' enquanto mantém 'c' como está, já que não é uma variável lógica. Eu tenho um monte de colunas, então eu não quero fazer isso uma por uma. E gostaria apenas de saber como fazer isso.

Você tem alguma sugestão?

questionAnswers(6)

yourAnswerToTheQuestion