I have a data frame with NAs and I want to replace the NAs with row means
c1 = c(1,2,3,NA)
c2 = c(3,1,NA,3)
c3 = c(2,1,3,1)
df = data.frame(c1,c2,c3)
> df
c1 c2 c3
1 1 3 2
2 2 1 1
3 3 NA 3
4 NA 3 1
so that
> df
c1 c2 c3
1 1 3 2
2 2 1 1
3 3 3 3
4 2 3 1
Very similar to @baptiste's answer
Another option is
na.aggregate
fromlibrary(zoo)
after transposing the datasetMy solution is
Is there a more elegant way, especially when someone has many columns?
Using
apply
(note the returned object is amatrix
):We use any anonymous function to change the values of each
NA
in each row to themean
of that row. The only advantage is that you don't have to do any more typing if the number of rows increases. It is not particularly efficient or fast in a computational sense, but more so in a cognitive sense (you won't notice unless you have 000,000's of rows).I think this works,