Eu tenho um conjunto de dados como este:
df1 <- data.frame(
col1 = c(1, 2, 3),
col2 = c(4, 5, 6),
col3 = c(2, 8, 9),
col4 = c(5, 11, 12),
col5 = c(13, 14, 15),
col6 = c(16, 17, 18),
col7 = c(19, 20, 21),
col8 = c(22, 23, 24)
)
e um segundo que tem uma 'chave' de correspondências que estou procurando no df1:
df2 <- data.frame(
colA = c(1, 2, 3),
colB = c(4, 5, 6),
value = c(100, 200, 300)
)
o que estou tentando fazer é encontrar cada correspondência de coluna em pares da esquerda para a direita e criar uma nova coluna contendo o valor de df2 toda vez que houver uma correspondência, para que fique assim:
df3 <- data.frame(
col1 = c(1, 2, 3),
col2 = c(4, 5, 6),
col3 = c(2, 8, 9),
col4 = c(5, 11, 12),
col5 = c(13, 14, 15),
col6 = c(16, 17, 18),
col7 = c(19, 20, 21),
col8 = c(22, 23, 24),
match1 = c(100, 200, 300),
match2 = c(200, NA, NA)
)
Eu tentei esse tipo de abordagem:
df_match <- inner_join(df1, df2, by = c("col1" = "colA", "col2" = "colB"))
df1$matched_value <- df_match$value[match(paste(df1$col1, df1$col2), paste(df_match$col1, df_match$col2))]
mas ele retorna apenas uma correspondência entre as linhas. O outro problema é que estou executando isso por muitas iterações que têm números variados de colunas em df1. Estou pensando que preciso de algo do tipo entre as linhas começa com 'col', mas estou bem travado.