Sostituire i valori NA con i mezzi a riga

Voglio sostituire i miei valori NA da una matrice acquisita da:

read.table(…) 

Questi valori dovrebbero essere la media della riga corrispondente.

Vale a dire, la seguente riga della tabella:

 1 2 1 NA 2 1 1 2 

potrebbe diventare

 1 2 1 1.43 2 1 2 

Grazie.

Ecco alcuni dati di esempio.

 m <- matrix(1:16, nrow=4) m[c(1,4,6,11,16)] <- NA 

Ed ecco come riempire le missioni con i mezzi di riga.

 k <- which(is.na(m), arr.ind=TRUE) m[k] <- rowMeans(m, na.rm=TRUE)[k[,1]] 

I tuoi dati saranno in un data.frame ; per prima cosa devi convertire in una matrice usando as.matrix . Puoi o non vuoi lasciarlo in quel formato; per riconvertire utilizzare as.data.frame .

 x[is.na(x)] <- mean(x, na.rm=TRUE) # for vectors or for a matrix as a whole t( apply(x, 1, function(xv) { xv[is.na(xv)] <- mean(xv, na.rm=TRUE) return(xv)} ) ) # for a row-oriented sol'n 
 a = c(NA, 1, 2, 3, 10) a[which(is.na(a)==TRUE)] = mean(a,na.rm = T)