Multiple replacement in R

I want to make some replacements in the matrix. For instance,

x <-sample(1:20,50,rep=T) replace(x, x == 4, 2) 

Replacing elements equal to 4 in x with replacement. But how to replace x == 4 with 2 , x ==3 with 4 and x == 5 with 6 .

Is there a built-in function to replace (4,3,5) respectively (2,4,6) ?

+4
source share
3 answers

1) Try the following:

  replace(seq(20), c(4,3,5), c(2,4,6))[x] 

2) Here is a more general approach:

  c(2, 4, 6, x)[match(x, c(4, 3, 5, x))] 

This second approach has the form: c(new, x)[match(x, c(old, x))]

+7
source

I smell the response to the data. table answer, but here is the approach to finding the environment:

 n <-50; set.seed(10) x <-sample(1:20,50,rep=T) inputs <- c(4,3,5) outputs <- c(2,4,6) library(qdap) lookup(x, inputs, outputs, missing = NULL) 

This person asked for a test:

enter image description here

On a 10,000 length vector (10 repetitions):

 Unit: microseconds expr min lq median uq max neval LOOKUP() 9875.384 9992.475 10236.9230 10571.405 11588.846 10 REPLACE() 76.973 85.837 94.7005 104.031 111.961 10 PLYR() 904.082 924.142 952.8315 973.124 1017.442 10 MATCH() 1796.034 1825.423 1864.3760 1881.870 1902.396 10 
+5
source

You can do it:

 find <- c(4,3,5) replace <- c(2,4,6) found <- match(x, find) ifelse(is.na(found), x, replace[found]) 

or use plyr mapvalues , which uses a similar implementation using match :

 library(plyr) mapvalues(x, find, replace, warn.missing = FALSE) 

Both methods work with any data. For character vectors, you can also convert to factors and permutation levels.

+5
source

All Articles