Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dealing with NaN when calculating means

I want to create a new column that contains the average two other columns.
For example by original table (dat) looks like this:

    A   B
1   1   NaN
2   3   2
3   2   5
4   4   4
5   6   NaN
6   5   3

I now want a column C that averages A and B, so I tried the following

dat$C<-(dat$A + $dat$B)/2

But what I get is this

    A   B     C
1   1   NaN   NaN
2   3   2     2.5
3   2   5     3.5
4   4   4     4
5   6   NaN   NaN
6   5   3     4

When what I want is this

    A   B     C
1   1   NaN   1
2   3   2     2.5
3   2   5     3.5
4   4   4     4
5   6   NaN   6
6   5   3     4

So how can I calculate this new mean value column while working around the missing values in my dataset?

like image 790
melanopygus Avatar asked Jan 23 '14 22:01

melanopygus


1 Answers

You can also do

dat$C <- apply(dat,1,function(x) mean(na.omit(x)))

na.omit is useful to know if you want to make a more complex function since na.omit is from base R while na.rm is an argument for certain functions.

like image 158
JeremyS Avatar answered Nov 04 '22 05:11

JeremyS