Using dplyr from the tidyverse you should be able to do this:
library(tidyverse)
AB <-
B %>%
rename(ID = `Cust No`, Name = `Customer Name`) %>%
full_join(A, ., by = "ID")
rename will let you change the names in B manually so that they match A in the form new_name = old_name. full_join will keep all rows in both data frames and placing A as the first argument and B (represented as the .) as the second argument will put the columns in A first. by = ensures you’re matching by the column ID.
solved Fill data frame with data from another data frame where columns do not match [closed]