Skip to content

Re place Values within vector using Translation vector

3 messages · Christian Langkamp, Duncan Murdoch, Greg Snow

#
Dear everyone 
I would like to change values in vectors doing a translation. i.e. I have a
start vector giving me the levels in one vector (numbers 1 to x - rating)
and then I have a second vector giving me the values to be allocated (loss
probabilities), but the number of potential rating classes and loss
estimates is still subject to a lot of discussion.

Attached a simplified version of the problem (original has more values and
needs to stay flexible, i.e. length of translation vector can change.

Trans_Prob_values<-c(0.005, 0.01, 0.1)
Trans_CR<-c(1,2,3)
a<-c(3,2,1,1,2,3)
A<-replace(a, Trans_CR, Trans_Prob_values)
A

This however produces
[1] 0.005 0.010 0.100 1.000 2.000 3.000
as opposed to the desired result.


The help however says 
"replace replaces the values in x with indexes given in list by those given
in values. If necessary, the values in values are recycled. " which in my
view should be exactly doing the job intended above.

Constructions with nested ifelse statements and individual replacements are
too cumbersome in my view.
I searched for conditional replacement, vector replace, replace function and
read the problems, but generally they have conditions like age>30 then x,
not a direct translation of values.

If anyone has an idea, please do share it.
Thanks
Christian
#
On 18/02/2009 4:24 PM, Christian Langkamp wrote:
Since your Trans_CR contains 1:3, this says the first 3 entries of x 
will be replaced, and that's what happened.

What you want is simply

A <- Trans_Prob_values[a]

(assuming that the indices are always in 1:x, and that Trans_Prob_values 
will have x values in it).

Duncan Murdoch


  by those given
#
The call to replace is replacing the 1st 3 elements of a (your indexes in Trans_CR) with the values and leaving the 4-6 elements alone.  For what you want, try:

A <- Trans_Prob_values[ match(a, Trans_CR) ]

Hope this helps,