Другой вариант с gsubfn
, где мы создаем list
пар ключ / значение в replacement
из gsubfn
для pattern
символов, которые не являются ;
.Обратите внимание, что в некоторых случаях слова отсутствуют в «df2».Если есть все замены, то второй gsub
не нужен (при условии, что в примере он не предоставлен)
library(gsubfn)
df1$Var_y <- gsub(";[A-Z0-9]+", "", gsubfn("[^;]+",
setNames(as.list(df2$Var_y), df2$Var_x), df1$Var2))
df1
# Var1 Var2 Var_y
#1 SJDJWK P04TGI7F3;P030Y7Y11;PE35RV747;Q2UKLVVX4 good;normal;bad;normal
#2 ODJSMDK Q2UKLVVX4;PWER00711;PE35RV747;Q2UKLVVX4 normal;bad;normal
#3 JDKSAKDJ PE35RV747;P0F071G1G bad
data
df1 <- structure(list(Var1 = c("SJDJWK", "ODJSMDK", "JDKSAKDJ"),
Var2 = c("P04TGI7F3;P030Y7Y11;PE35RV747;Q2UKLVVX4",
"Q2UKLVVX4;PWER00711;PE35RV747;Q2UKLVVX4", "PE35RV747;P0F071G1G"
)), class = "data.frame", row.names = c("1", "2", "3"))
df2 <- structure(list(Var_x = c("P04TGI7F3", "P030Y7Y11", "PE35RV747",
"Q2UKLVVX4"), Var_y = c("good", "normal", "bad", "normal")),
class = "data.frame", row.names = c("1",
"2", "3", "4"))