Apologies if this is a duplicate question, I have a feeling it has been asked, but I will provide a good example to help with understanding this. First the demo dataframes:
Another way would be to use your map_df as a look-up table.
rownames(map_df) = map_df$name
main_df$P1 = map_df[main_df$P1, "id"]
main_df$P2 = map_df[main_df$P2, "id"]
We can use match
. Loop over the columns with lapply
, match
with 'name' column of 'map_df' and use the numeric index to change the values to the corresponding 'id' in 'map_df', assign the output to 'main_df'
main_df[] <- lapply(main_df, function(x) map_df$id[match(x, map_df$name)])
Or convert it to a matrix
and match it
main_df[] <- setNames(map_df$id, map_df$name)[as.matrix(main_df)]