Replace all values lower than threshold in R

前端 未结 4 1818
予麋鹿
予麋鹿 2020-12-11 03:09

I have a vector

x <- c(-1, 0, 1, 2, 3)

I want all values less than 1 to be replaced by 1.

How?

Is there a no-loop so

相关标签:
4条回答
  • 2020-12-11 03:33

    The other solutions are more appropriate. This is just for fun:

    (x > 1) * (x - 1) + 1
    #[1] 1 1 1 2 3
    

    Simple replacement (@Matthew Lundberg) is the most efficient solution:

    library(microbenchmark)
    microbenchmark(pmax(1, x),
                   "[<-"(x, x < 1, 1),
                   (x > 1) * (x - 1) + 1)
    
    # Unit: microseconds
    #                   expr    min      lq  median      uq    max neval
    #             pmax(1, x) 15.494 16.2545 16.5165 16.9365 52.165   100
    #     `[<-`(x, x < 1, 1)  1.466  1.6920  2.3325  2.7485 23.683   100
    #  (x > 1) * (x - 1) + 1  2.084  2.2870  2.7880  3.2080  8.958   100
    
    0 讨论(0)
  • 2020-12-11 03:37

    Another option would be replace:

    x <- c(-1, 0, 1, 2, 3)
    
    replace(x, x < 1,1)
    # [1] 1 1 1 2 3
    
    0 讨论(0)
  • 2020-12-11 03:58

    Use logical indexing with replacement:

    x[ x<1 ] <- 1
    
    0 讨论(0)
  • 2020-12-11 03:59

    pmax is a good candidate for this

      > pmax(x, 1)
        [1] 1 1 1 2 3
    
    0 讨论(0)
提交回复
热议问题