Поскольку в 'df1' есть повторяющиеся строки, мы можем получить unique
строки
df3 <- unique(df1)
Затем, используя match
, получить idnex
i1 <- match(df2$Col1, df3$Col1)
ина основе индекса присвойте
df2$Col2 <- df3$Col2[i1]
Если совпадений нет, это будет NA
, который можно изменить на 0
df2$Col2[is.na(df2$Col2)] <- 0
df2
# Col1 Col2
#1 C 7
#2 D 0
#3 C 7
#4 F 0
#5 A 1
#6 B 4
#7 B 4
Или это может бытьсделано с помощью data.table
путем join
ввода в 'Col1' и присвоении 'Col2' (после удаления Col2 из вторых данных) с Col2 из 'df3'
library(data.table)
setDT(df2)[, Col2 := NULL][df3, Col2 := Col2, on = .(Col1)]
data
df1 <- structure(list(Col1 = c("A", "A", "B", "A", "B", "B", "C"), Col2 = c(1,
1, 4, 1, 4, 4, 7)), class = "data.frame", row.names = c(NA, -7L
))
df2 <- structure(list(Col1 = c("C", "D", "C", "F", "A", "B", "B"), Col2 = c("X",
"X", "X", "X", "X", "X", "X")), class = "data.frame", row.names = c(NA,
-7L))