Search code examples
rgsubstringistring-substitution

r remove keywords in a column


I have a column in my dataframe with words like this.

ColA
2-4 Model
Group1
Group ACH
Group2
Phenols
Group1
Group ACH
Group2
MONO MHPP
Group1
Group ACH
Group2

I want to create two additional columns like this: 1) without keywords c("Group1", "Group (ACH)", "Group2") and 2) a second column that retains only those bag of words.

ColA          ColB        ColC
2-4 Model     2-4 Model   
Group1                    Group1
Group (ACH)               Group (ACH) 
Group2                    Group2
Phenols      Phenols 
Group1                    Group1
Group (ACH)               Group (ACH)
Group2                    Group2
MONO MHPP    MONO MHPP
Group1                    Group1
Group (ACH)               Group (ACH)
Group2                    Group2  

I tried gsub and str_replace but no results. So any suggestion is much appreciated.


Solution

  • You may use an ifelse -

    val <- c('Group1', 'Group ACH', 'Group2')
    df <- transform(df, ColB = ifelse(ColA %in% val, '', ColA), 
                        ColC = ifelse(ColA %in% val, ColA, ''))
    df
    
    #        ColA      ColB      ColC
    #1  2-4 Model 2-4 Model          
    #2     Group1              Group1
    #3  Group ACH           Group ACH
    #4     Group2              Group2
    #5    Phenols   Phenols          
    #6     Group1              Group1
    #7  Group ACH           Group ACH
    #8     Group2              Group2
    #9  MONO MHPP MONO MHPP          
    #10    Group1              Group1
    #11 Group ACH           Group ACH
    #12    Group2              Group2
    

    If in general, you want to check for all "Group" values you may use grepl instead of mentioning all of them in val.

    df <- transform(df, ColB = ifelse(grepl('Group', ColA), '', ColA), 
                        ColC = ifelse(grepl('Group', ColA), ColA, ''))