Если мы используем data.table
, выполните объединение с помощью 'KEY' с назначением 'RefDT' (:=
- аналогично mutate
) 'TYPE' в 'RefDT', чтобы создать столбец 'TYPE'в 'DT'.Если совпадений нет, по умолчанию он будет заполнен NA
.Затем выполните последующие присвоения, указав логическое условие в i
(grepl("-", NO)
- проверьте на -
в столбце «НЕТ», проверьте «P» или «R» в «ГРУППЕ», где «ТИП»NA
)
setDT(DT)[RefDT, TYPE := TYPE, on = .(KEY)]
DT[grepl("-", NO), TYPE := "INN"
][is.na(TYPE) & grepl("P|R", GROUP), TYPE := "OTHER"][]
# NO GROUP KEY TYPE
#1: 12-19 N 1701 INN
#2: 10-20 N 1602 INN
#3: 13 P 1501John BANK
#4: 14 R 1408Mary POOL
#5: 15 G 1408Peter PARK
#6: 19 K 1408Paul BANK
#7: 25 P 1708 OTHER
#8: 36 R 1503 OTHER
data
DT <- structure(list(NO = c("12-19", "10-20", "13", "14", "15", "19",
"25", "36"), GROUP = c("N", "N", "P", "R", "G", "K", "P", "R"
), KEY = c("1701", "1602", "1501John", "1408Mary", "1408Peter",
"1408Paul", "1708", "1503")), .Names = c("NO", "GROUP", "KEY"
), row.names = c(NA, -8L), class = "data.frame")
RefDT <- structure(list(KEY = c("1609TOM", "1501John", "1408Mary", "1408Peter",
"1408Paul", "1309Sue"), TYPE = c("PARK", "BANK", "POOL", "PARK",
"BANK", "POOL")), .Names = c("KEY", "TYPE"),
class = "data.frame", row.names = c(NA,
-6L))