Replace -inf, NaN and NA values with zero in a dataset in R

I am trying to run some trading strategies in R. I have downloaded some stock prices and calculated returns. The new return dataset has a number of -inf, NaN, and NA values. I am reproducing a row of the dataset (log_ret). Its a zoo dataset.

library(zoo) log_ret <- structure( c(0.234,-0.012,-Inf,NaN,0.454,Inf), .Dim = c(1L, 6L), .Dimnames = list(NULL, c("x", "y", "z", "s", "p", "t")), index = structure(12784, class = "Date"), class = "zoo" ) x y z s p t 2005-01-01 0.234 -0.012 -Inf NaN 0.454 Inf 

How can I replace these unwanted values with 0?

1

5 Answers

As per ?zoo:

Subscripting by a zoo object whose data contains logical values is undefined.

So you need to wrap the subsetting in a which call:

log_ret[which(!is.finite(log_ret))] <- 0 log_ret x y z s p t 2005-01-01 0.234 -0.012 0 0 0.454 0 
0

Inf, NA and NaN are matched by !is.finite, for example

a <- c(1, Inf, NA, NaN) a[!is.finite(a)] <- 0 # a is now [1, 0, 0, 0] 

I don't know too much about manipulating zoo objects, but for the example above

log_ret[1, !is.finite(log_ret)] <- 0 

works. In your actual data you will have to loop over all rows. There might be a zoo-specific way of doing this.

Edit: The zoo-specific way is log_ret[which(!is.finite(log_ret))] <- 0.

2

Another way to do it is (where df=your dataframe):

is.na(df)<-sapply(df, is.infinite) df[is.na(df)]<-0 

I don't know if this works for zoo objects, but it gets around the problem of is.infinite() only working on vectors.

1

Using mutate_all in dplyr:

library(dplyr) fortify.zoo(log_ret) %>% mutate_all(function(x) ifelse(is.infinite(x), 0, x)) 
2

Since the lifecycle for mutate_all has been superseded by the use of across:

library(dplyr) fortify.zoo(log_ret) %>% mutate(across(.cols = everything(), ~ ifelse(is.infinite(.x), 0, .x))) 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like