alki
alki

Reputation: 3584

R: replacing values in string all at once

I have a data frame that looks like this:

    USequence
# 1 GATCAGATC
# 2 ATCAGAC

I'm trying to create a function that would replace all the G's with C's, A's with T's, C's with G's, and T's with A's:

    USequence
# 1 CTAGTCTAG
# 2 TAGTCTG

This is what I have right now, the function accepts k, a data frame with a column named USequence.

conjugator <- function(k) {
  k$USequence <- str_replace_all(k$USequence,"A","T")
  k$USequence <- str_replace_all(k$USequence,"T","A")
  k$USequence <- str_replace_all(k$USequence,"G","C")
  k$USequence <- str_replace_all(k$USequence,"C","G")
}

However the obvious problem would be that this is doesn't replace the characters at once, but rather in steps which would not return the desired result. Any suggestions? Thanks

Upvotes: 1

Views: 56

Answers (1)

akrun
akrun

Reputation: 887951

You could use chartr

df1$USequence <- chartr('GATC', 'CTAG', df1$USequence)
df1$USequence 
#[1] "CTAGTCTAG" "TAGTCTG"  

Or

library(gsubfn)
gsubfn('[GATC]', list(G='C', A='T', T='A', C='G'), df1$USequence)
#[1] "CTAGTCTAG" "TAGTCTG"  

Upvotes: 6

Related Questions