0

It's a pretty simple question but I couldn't find a satisfactory solution.

I have 2 vectors:

AA <- c("AAA", "BBB", "CCC", "DDD", "EEE", "FFF")
AASIN <- c("X", "Y", "R", "Z", "T", "G")

That should be used for transformation by a specific set of rules:

AAA = X, BBB = Y, CCC = R, DDD = Z, EEE = T, FFF = G

Now, I want to take a third vector:

BB <- c("BBB", "EEE", "FFF")

And transform it to:

"Y", "T", "G"

I'm using R and tried a for loop with gsub that didn't work:

for (i in 1:length(B)) {
    B <- gsub("AAA", "X", B)
    B <- gsub("BBB", "Y", B)
    B <- gsub("CCC", "R", B)
    B <- gsub("DDD", "Z", B)
    B <- gsub("EEE", "T", B)
    B <- gsub("FFF", "G", B)
}

I've also tried gsubfn:

B <- gsubfn(list("AAA" = "X", "BBB" = "Y", "CCC"= "R", "DDD" = "Z", "EEE" = "T", "FFF" = "G"), B)

And mgsub:

B <- mgsub(c("AAA", "BBB", "CCC", "DDD", "EEE", "FFF"), c("X", "Y", "R", "Z", "T", "G"), B)

But none seem to do the work.

Any ideas?

Thanks

Adrian Smith
  • 139
  • 4
  • 2
    Make a named vector, then do subset with name. This is a duplicated post, I will try to find. something like: `myV <- c(AAA = X, BBB = Y, CCC = R, DDD = Z, EEE = T, FFF = G)` then `myV[ "BBB"]` will give you "Y". – zx8754 Feb 02 '18 at 14:16
  • The code which you shared worked for me with a small change. The vector which you want to change is stored as BB but vector used in for loop is B. Once you make this change, it gives the desired output. – Sourabh Feb 02 '18 at 14:18
  • Try this: `myV <- setNames(c("X", "Y", "R", "Z", "T", "G"), c("AAA", "BBB", "CCC", "DDD", "EEE", "FFF")); BB <- c("BBB", "EEE", "FFF"); myV[ BB ]` gives: `"Y" "T" "G" ` – zx8754 Feb 02 '18 at 14:40

0 Answers0