Skip to content Skip to sidebar Skip to footer

Update A Column In Df2 By Matching Patterns In Columns In Df1 & Df2 Using R

I have 2 data frames like this TEAM <- c('PE','PE','MPI','TDT','HPT','ATD') CODE <- c(NA,'F','A','H','G','D') df1 <- data.frame(TEAM,CODE) CODE <- c(NA,'F100','A234',

Solution 1:

Using match and substr (both in base R):

df2$TEAM = df1$TEAM[match(substr(df2$CODE, 1, 1), df1$CODE)]

df2
#    CODE TEAM# 1  <NA>   PE# 2  F100   PE# 3  A234  MPI# 4  D664  ATD# 5  H435  TDT# 6  G123  HPT# 7  A666  MPI# 8  D345  ATD# 9  G324  HPT# 10 <NA>   PE

This is expedient for a single case - if you're doing things like this frequently I would encourage you to just extract the first letter of code into its own column, CODE_1, and then do a regular merge or join.

Solution 2:

Assuming you are looking for an sqldf solution try this:

sqldf("select CODE, 
              case
                 when CODE like 'F%' then 'PE'
                 when CODE like 'A%' then 'MPI'
                 when CODE like 'D%' then 'ATD'
                 when CODE like 'G%' then 'HPT'
                 when CODE like 'H%' then 'TDT'
                 else 'PE'
              end TEAM from df2", method = "raw")

or this:

sqldf("select df2.CODE, coalesce(df1.TEAM, 'PE') TEAM 
       from df2 
       left join df1 on substr(df2.CODE, 1, 1) = df1.CODE")

Post a Comment for "Update A Column In Df2 By Matching Patterns In Columns In Df1 & Df2 Using R"