Вы можете сделать:
df1$TAX.CLASS<- ifelse(is.na(df1$TAX) | df1$TAX <= 0.00, "CLASS1", "CLASS2")
df_final <- merge(df1, df2, by = c("CODE", "TAX.CLASS"), all.x = TRUE)
Вывод:
CODE TAX.CLASS TAX PRICE TOTAL MEANING
1: 4021 CLASS1 NA 20.0 20 Food
2: 4577 CLASS2 0.9 99.1 100 Car
3: 6987 CLASS1 0.0 40.0 40 Gasoline
4: 7788 CLASS2 1.5 13.5 15 Phone
5: 8965 CLASS1 NA 25.0 25 Internet
Это решение в base
, но ту же логику можно применять в любом пакете.
Обратите внимание, что вы также можете использовать with
в первом операторе, чтобы избежать ссылки на фрейм данных:
df1$TAX.CLASS<- with(df1, ifelse(is.na(TAX) | TAX <= 0.00, "CLASS1", "CLASS2"))