Q:

How I swap rownames in these data?

I have a microarray gene expression matrix like this by weird gene IDs in rows. 
> head(mat[1:10,1:5])

> dim(mat)
[1] 39302    76
>

There is matched gene symbol for each of these identifiers in another matrix 
> 

> dim(matched)
[1] 23107     1
>

How I can have matched gene symbol with probe identifiers in the row names of my expression matrix please? The problem is, for one gene symbol we may 
I tried 
> merged <- merge(mat, matched) 
Error: cannot allocate vector of size 6.8 Gb

EDITED

tmp = paste(matched[rownames(mat)],rownames(mat),sep="_")
> rownames(mat) = tmp

EDITED 
This is my matrix after matching prob identifiers to gene symbol
> head(array[,1:10,1:5])
               GSM482796 GSM482797 GSM482798 GSM482799
1         OR2T6    0.0171   -0.1100   -0.0394   -0.0141
2          EBF1    0.1890    0.0222    0.0832    0.0459
3 DKFZp686D0972    1.9400    0.2530    0.3770    0.8310
4        ATP8B4   -0.1490    0.0690   -0.0637   -0.0527
5      NOTCH2NL    0.1540   -0.3880    0.2160   -0.0812
6        SPIRE1    0.2920    0.1690    0.5500    0.1430

but now for some genes I have several probes. For example for gene A I have several matched probes. So I have repetition for gene A. How I can take mean over the expression of repeated genes please and having an unique value?

A:

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 %>%
  group_by(probe_colum) %>%
  summarise_all(mean or sum or ...) %>%
  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.

A:

You need to think about whether to take the average for all probes belonging to one gene, or simply append the gene name to the probe id.
If it is simply adding a gene name, maybe try this below, note I am assuming that all your rownames of mat can be found in matched
# check whether all rownames are in matched
table(rownames(mat) %in% rownames(matched))
# rename the rows
tmp = paste(matched[match(rownames(mat),rownames(matched)),1],rownames(mat),sep="_")
rownames(mat) = tmp

