The names (column names) of the first dataframe do not match the names of the second one. Just as the error message says.
> identical(names(xd.small[[1]]), names(xd.small[[2]]) ) [1] FALSE
If you do not care about the names of the 3rd or 4th columns of the second df, you can coerce them to be the same:
> names(xd.small[[1]]) <- names(xd.small[[2]]) > identical(names(xd.small[[1]]), names(xd.small[[2]]) ) [1] TRUE
Then things should proceed happily.