Предполагая, что вы имеете в виду совпадающие значения по позиции, здесь есть одно базовое решение R. Может быть все проще с такими пакетами, как data.table или dplyr, но, как правило, приятно сначала получить представление об использовании базы R.
Скорее всего, есть более приятные способы получить приведенный ниже результат. Я обычно не использую базу R для этого типа соединений
df1 <- data.frame(a1 = c("b2","c2","abc2"), b1 = c("bb2","cc2","d2"), stringsAsFactors = FALSE)
df2 <- data.frame(sale = c("sale","sale2","sale3"), b1 = c("b2","c2","d2"), stringsAsFactors = FALSE)
df1$sale <- df2$sale
joined <- merge(df2,df1,by = 'sale')
joined$new <- ifelse(joined$b1.x == joined$b1.y, joined$b1.x, joined$b1.y)
joined[,c(1,5)]
#> sale new
#> 1 sale bb2
#> 2 sale2 cc2
#> 3 sale3 d2
Примечание. Я изменил имя во фреймах данных и изменил коэффициенты на символы, что делает возможным объединение.
Ключ в том, чтобы создать переменную, которая позволяет объединять / объединять (как бы вы ни хотели это вызывать). Я использую sale
- это позволяет сопоставить по позиции.
обновление
Спасибо @WaltS за указание на гораздо более простой вариант. Поскольку сопоставление осуществляется по позиции, можно выполнить прямое присвоение столбца:
# date frames from above without factors!!
df2$new <- ifelse(df2$b1 == df1$a1, df1$b1, df2$b1)
df2
#> sale b1 new
#> 1 sale b2 bb2
#> 2 sale2 c2 cc2
#> 3 sale3 d2 d2
Создано в 2020-02-23 с помощью пакета Представить (v0.3.0)