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:
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)]