Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R: gsub, pattern = vector and replacement = vector

Tags:

r

As the title states, I am trying to use gsub where I use a vector for the "pattern" and "replacement". Currently, I have a code that looks like this:

  names(x1) <- gsub("2110027599", "Inv1", names(x1)) #x1 is a data frame   names(x1) <- gsub("2110025622", "Inv2", names(x1))   names(x1) <- gsub("2110028045", "Inv3", names(x1))   names(x1) <- gsub("2110034716", "Inv4", names(x1))   names(x1) <- gsub("2110069349", "Inv5", names(x1))   names(x1) <- gsub("2110023264", "Inv6", names(x1)) 

What I hope to do is something like this:

  a <- c("2110027599","2110025622","2110028045","2110034716", "2110069349", "2110023264")   b <- c("Inv1","Inv2","Inv3","Inv4","Inv5","Inv6")   names(x1) <- gsub(a,b,names(x1)) 

I'm guessing there is an apply function somewhere that can do this, but I am not very sure which one to use!

EDIT: names(x1) looks like this (There are many more columns, but I'm leaving them out):

> names(x1)   [1] "2110023264A.Ms.Amp"        "2110023264A.Ms.Vol"        "2110023264A.Ms.Watt"       "2110023264A1.Ms.Amp"         [5] "2110023264A2.Ms.Amp"       "2110023264A3.Ms.Amp"       "2110023264A4.Ms.Amp"       "2110023264A5.Ms.Amp"         [9] "2110023264B.Ms.Amp"        "2110023264B.Ms.Vol"        "2110023264B.Ms.Watt"       "2110023264B1.Ms.Amp"        [13] "2110023264Error"           "2110023264E-Total"         "2110023264GridMs.Hz"       "2110023264GridMs.PhV.phsA"  [17] "2110023264GridMs.PhV.phsB" "2110023264GridMs.PhV.phsC" "2110023264GridMs.TotPFPrc" "2110023264Inv.TmpLimStt"    [21] "2110023264InvCtl.Stt"      "2110023264Mode"            "2110023264Mt.TotOpTmh"     "2110023264Mt.TotTmh"        [25] "2110023264Op.EvtCntUsr"    "2110023264Op.EvtNo"        "2110023264Op.GriSwStt"     "2110023264Op.TmsRmg"        [29] "2110023264Pac"             "2110023264PlntCtl.Stt"     "2110023264Serial Number"   "2110025622A.Ms.Amp"         [33] "2110025622A.Ms.Vol"        "2110025622A.Ms.Watt"       "2110025622A1.Ms.Amp"       "2110025622A2.Ms.Amp"        [37] "2110025622A3.Ms.Amp"       "2110025622A4.Ms.Amp"       "2110025622A5.Ms.Amp"       "2110025622B.Ms.Amp"         [41] "2110025622B.Ms.Vol"        "2110025622B.Ms.Watt"       "2110025622B1.Ms.Amp"       "2110025622Error"            [45] "2110025622E-Total"         "2110025622GridMs.Hz"       "2110025622GridMs.PhV.phsA" "2110025622GridMs.PhV.phsB" 

What I hope to get is this:

> names(x1)   [1] "Inv6A.Ms.Amp"        "Inv6A.Ms.Vol"        "Inv6A.Ms.Watt"       "Inv6A1.Ms.Amp"       "Inv6A2.Ms.Amp"         [6] "Inv6A3.Ms.Amp"       "Inv6A4.Ms.Amp"       "Inv6A5.Ms.Amp"       "Inv6B.Ms.Amp"        "Inv6B.Ms.Vol"         [11] "Inv6B.Ms.Watt"       "Inv6B1.Ms.Amp"       "Inv6Error"           "Inv6E-Total"         "Inv6GridMs.Hz"        [16] "Inv6GridMs.PhV.phsA" "Inv6GridMs.PhV.phsB" "Inv6GridMs.PhV.phsC" "Inv6GridMs.TotPFPrc" "Inv6Inv.TmpLimStt"    [21] "Inv6InvCtl.Stt"      "Inv6Mode"            "Inv6Mt.TotOpTmh"     "Inv6Mt.TotTmh"       "Inv6Op.EvtCntUsr"     [26] "Inv6Op.EvtNo"        "Inv6Op.GriSwStt"     "Inv6Op.TmsRmg"       "Inv6Pac"             "Inv6PlntCtl.Stt"      [31] "Inv6Serial Number"   "Inv2A.Ms.Amp"        "Inv2A.Ms.Vol"        "Inv2A.Ms.Watt"       "Inv2A1.Ms.Amp"        [36] "Inv2A2.Ms.Amp"       "Inv2A3.Ms.Amp"       "Inv2A4.Ms.Amp"       "Inv2A5.Ms.Amp"       "Inv2B.Ms.Amp"         [41] "Inv2B.Ms.Vol"        "Inv2B.Ms.Watt"       "Inv2B1.Ms.Amp"       "Inv2Error"           "Inv2E-Total"          [46] "Inv2GridMs.Hz"       "Inv2GridMs.PhV.phsA" "Inv2GridMs.PhV.phsB"  
like image 424
Wet Feet Avatar asked Oct 17 '13 10:10

Wet Feet


People also ask

How do I replace GSUB in R?

Wrapping Up. The sub() and gsub() function in R is used for substitution as well as replacement operations. The sub() function will replace the first occurrence leaving the other as it is. On the other hand, the gsub() function will replace all the strings or values with the input strings.

What does GSUB return in R?

gsub() function in R Language is used to replace all the matches of a pattern from a string. If the pattern is not found the string will be returned as it is.

Is GSUB slow?

#gsub is not only slower, but it also requires an extra effort for the reader to 'decode' the arguments.

How does sub function work in R?

The sub() function in R is used to replace the string in a vector or a data frame with the input or the specified string. When you are dealing with large data sets, it's impossible to look at each line to find and replace the target words or strings. In this case, the sub() function will replace string.


1 Answers

Lot's of solutions already, here are one more:

The qdap package:

library(qdap) names(x1) <- mgsub(a,b,names(x1)) 
like image 103
Tyler Rinker Avatar answered Oct 05 '22 20:10

Tyler Rinker