Replace all values ​​below the threshold in R

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 solution without a loop?

+7
r
source share
4 answers

pmax is a good candidate for this

  > pmax(x, 1) [1] 1 1 1 2 3 
+9
source share

Use logical indexing with replacement:

 x[ x<1 ] <- 1 
+22
source share

Other solutions are more appropriate. This is just plain fun:

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

A 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 
+4
source share

Another option would be replace :

 x <- c(-1, 0, 1, 2, 3) replace(x, x < 1,1) # [1] 1 1 1 2 3 
0
source share

All Articles