У меня есть два кадра данных.
ДАННЫЕ
Name Type Code
gabapentine Pharmaceutical 60142-96-3
Glyphosate Pesticide 1071-83-6
Guanylurea Pharmaceutical 141-83-3
hydrochlorthiazide Pharmaceutical 58-93-5
Значения
Name Value Code
gabapentine 0,2 60142-96-3
Glyphosate 1,8 1071-83-6
Urea 1,2 141-83-3
hydrochlorthiazide 0,5 58-93-5
Я хочу добавить столбец type
из Data
в Values
, сопоставив столбцы Name
и Code
.
Я знаю, как сопоставить только один столбец, например:
Values$type = Data$type[match(Values$Name, Data$Name)]
Но теперь я хочу принять во внимание также Code
, поскольку некоторые имена не совпадают.
Есть ли способ сделать это в одну строку, например
Values$type = Data$type[match((Values$Name, Data$Name) | (Values$Code, Data$Code))]
Это не сработало для меня, поэтому я хотел бы знать, как это сделать правильно.
Я пытался использовать слияние, как и в других вопросах
merge(Values, Data,all.x = TRUE)
, но в Guanylurea
из фрейма данных Data
Я получаю тип NA
, когда он должен совпадать Urea
из фрейма данных Values
.Результат для этой строки будет Type
равен Pharmaceutical
, но Names
точно не совпадает.Так как же я могу добавить частичное совпадение в функции match
или merge
?Или есть альтернатива этим двум?