How I swap rownames in these data?
There are actually two questions.

The first one is about the memory issue. I believe merge from data.table would solve that issue.

The second one would be aggregating or summarizing the identifiers. As @StupidWolf mentioned, you need to have a rule, summing them up, averaging them, ... For this second part one way is using dplyr:

merged_data %&gt;%
  group_by(probe_colum) %&gt;%
  summarise_all(mean or sum or ...) %&gt;%
  mutate(new_column = paste(probe_column, gene_column, sep = "_"))


The same thing can be done faster with data.table:

merged_data[, lapply(.SD, mean or sum or ..., na.rm=TRUE), by = probe_column ] [, new_column := paste(probe_column, gene_column, sep = "_"),]  


.SD means subset of data and your subsets are your groups based on your probes.