Используя вход, воспроизводимый в примечании в конце, выполните самостоятельное соединение слева. ltrim
удаляет любые A
или R
в левой части кода первого экземпляра DF
, а затем substr
принимает следующие 5 символов. Сопоставьте это со вторым экземпляром DF
s Code
. Если перед именем стоят другие буквы, включите их в строку AR
. Если могут появиться какие-либо заглавные буквы, тогда используйте ABCDEFGHIJKLMNOPQRSTUVWXYZ
.
library(sqldf)
sqldf("select a.Code, coalesce(b.Name, a.Name) Name
from DF a left join DF b
on substr(ltrim(a.Code, 'AR'), 1, 5) = b.Code")
, давая:
Code Name
1 25000 James John Junior
2 RA25000 James John Junior
3 RA2500009 James John Junior
4 RA27000 Bill Hope
5 RA2800009 Donna Love Scott
6 28000 Donna Love Scott
Примечание
Lines <- "Code Name
25000 James John Junior
RA25000 James Junior
RA2500009 James J. Junior
RA27000 Bill Hope
RA2800009 Donna Scott
28000 Donna Love Scott"
Lines2 <- readLines(textConnection(Lines))
DF <- read.csv(text = sub(" +", ",", Lines2), header = TRUE, strip.white = TRUE)