Cleaning `Inf` values from an R dataframe

995    Asked by BuffyHeaton in Tableau , Asked on Jul 17, 2021

In R, I have an operation which creates some Inf values when I transform a data frame.

I would like to turn these Inf values into NA values. The code I have is slow for large data, is there a faster way of doing this?

Say I have the following data frame:

dat <- data.frame(a=c(1, Inf), b=c(Inf, 3), d=c("a","b"))

The following works in a single case:

 dat[,1][is.infinite(dat[,1])] = NA

So I generalized it with the following loop

cf_DFinf2NA <- function(x)
{
    for (i in 1:ncol(x)){
          x[,i][is.infinite(x[,i])] = NA
    }
    return(x)
}

But I don't think that this is really using the power of R.

Answered by Dipesh Bhardwaj

To clean 'Inf' values from a data frame, you can use the following functions:

Using do.call and replace on the data frame:

You can also use the set function from the data. table package which uses references instead of internal copying.

Or

To remove inf in r, you can also use the following functions:

Using do.call and replace on the data frame:
dat <- data.frame(a=c(1, Inf), b=c(Inf, 3), d=c("a","b"))
> dat
    a b d
1 1 Inf a
2 Inf 3 b
> do.call(data.frame,lapply(dat, function(x) replace(x, is.infinite(x),NA)))
   a b d
1 1 NA a
2 NA 3 b
You can also use the set function from the data.table package which uses references instead of internal copying.
for (j in 1:ncol(dat)) set(dat, which(is.infinite(dat[[j]])), j, NA)
> dat
   a b d
1 1 NA a2 NA 3 b


Your Answer

Interviews

Parent Categories