Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiple replacement in R

Tags:

r

I want to do multiple replacements in the matrix. For example,

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

Replacing the elements equal to 4 in x with 2 by using replace. But how can I replace x == 4 with 2, x ==3 with 4 and x == 5 with 6.

Is there any built function to replace (4,3,5) respectively with (2,4,6)?

like image 843
user1784579 Avatar asked Apr 26 '13 03:04

user1784579


2 Answers

1) Try this:

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

like image 132
G. Grothendieck Avatar answered Oct 02 '22 20:10

G. Grothendieck


I smell a data.table answer cooking but here's an environment lookup approach:

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 one begged for a benchmark:

enter image description here

On 10,000 length vector (10 replications):

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
like image 37
Tyler Rinker Avatar answered Oct 02 '22 20:10

Tyler Rinker