Skip to content
Prev 389045 / 398506 Next

How to globally convert NaN to NA in dataframe?

Hi Luigi.

Weird. But maybe it is the desired behaviour of summary when calculating
mean of numeric column full of NAs.

See example

dat <- data.frame(x=rep(NA, 110), y=rep(1, 110), z= rnorm(110))

# change all values in second column to NA
dat[,2] <- NA
# change some of them to NAN
dat[5:6, 2:3] <- 0/0

# see summary
summary(dat)
    x                 y             z          
 Mode:logical   Min.   : NA   Min.   :-1.9798  
 NA's:110       1st Qu.: NA   1st Qu.:-0.4729  
                Median : NA   Median : 0.1745  
                Mean   :NaN   Mean   : 0.1856  
                3rd Qu.: NA   3rd Qu.: 0.8017  
                Max.   : NA   Max.   : 2.5075  
                NA's   :110   NA's   :2        

# change NAN values to NA
dat[sapply(dat, is.nan)] <- NA
*************************

#summary is same
summary(dat)
    x                 y             z          
 Mode:logical   Min.   : NA   Min.   :-1.9798  
 NA's:110       1st Qu.: NA   1st Qu.:-0.4729  
                Median : NA   Median : 0.1745  
                Mean   :NaN   Mean   : 0.1856  
                3rd Qu.: NA   3rd Qu.: 0.8017  
                Max.   : NA   Max.   : 2.5075  
                NA's   :110   NA's   :2        

# but no NAN value in data
dat[1:10,]
    x  y          z
1  NA NA -0.9148696
2  NA NA  0.7110570
3  NA NA -0.1901676
4  NA NA  0.5900650
5  NA NA         NA
6  NA NA         NA
7  NA NA  0.7987658
8  NA NA -0.5225229
9  NA NA  0.7673103
10 NA NA -0.5263897

So my "nice compact command"
dat[sapply(dat, is.nan)] <- NA

works as expected, but summary gives as mean NAN.

Cheers
Petr
get