There are several methods to perform this particular task,Since all the keys are named I will specify you the fastest and shortest one to do an inner join merge():
merge(df1,df2)
A full inner joint as asked in the question can be created using “all” keyword:
merge(df1,df2, all=TRUE)
A left Outer joint of df1 and df2 can be created using:
merge(df1,df2, all.x=TRUE)
A right joint of df1 and df2 can be done using:
merge(df1,df2, all.y=TRUE)
You can find other methods too but in my approach this is the best one.