相关文章推荐
怕老婆的跑步机  ·  python replace 去掉 ...·  2 天前    · 
被表白的遥控器  ·  git ...·  1 年前    · 
神勇威武的豆浆  ·  java - Hitting space ...·  1 年前    · 
重感情的桔子  ·  24.THYMELEAF ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

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?

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.

I tried that before as well. But for some reason, none of the values in the dataset changed. – user2641784 Jun 22, 2015 at 22:54

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
                log_ret in the question is NOT a data.frame.  This code gives an error if df is log_ret.
– G. Grothendieck
                Sep 23, 2020 at 13:07
                @Grubbmeister  does the first line set all infinite values to NA and then the second line replaces all NA with 0? if yes, is the first step creating a logical vector is.na(df) that gets stored in R?
– Din
                Jan 6, 2023 at 6:57
                That code gives an error: Error in UseMethod("tbl_vars") : no applicable method for 'tbl_vars' applied to an object of class "zoo"
– G. Grothendieck
                Sep 22, 2020 at 17:27

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)))
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.