2
$\begingroup$

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?

$\endgroup$
  • $\begingroup$ It's not at all clear what format your data are in. Could you add dput(head(matched))? $\endgroup$ – alan ocallaghan Oct 18 at 11:24
1
$\begingroup$

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
$\endgroup$
  • $\begingroup$ Sorry I done but nothing happened and in mat rownames still I have weird probee identifiers. Ideally I should take average over different probe identifiers for a gene symbol $\endgroup$ – Angel Oct 10 at 13:11
  • $\begingroup$ What is "matched"? Is it a data.frame or vector or ... ? $\endgroup$ – StupidWolf Oct 10 at 13:26
  • $\begingroup$ Matched is a matrix its rownames are probe identifiers and their matched gene symbols in the first column $\endgroup$ – Angel Oct 10 at 13:48
  • 1
    $\begingroup$ Ok I have edited my code.. you should get non NA. You can also add the gene as a separate column $\endgroup$ – StupidWolf Oct 10 at 14:02
2
$\begingroup$

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.

$\endgroup$
  • 1
    $\begingroup$ hey @haci, what you proposed should work. Adding one column to the original expression matrix should not lead to memory issues. I think the problem might be coming from not being able to match the probe id to rownames of the matrix $\endgroup$ – StupidWolf Oct 10 at 13:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.