Forgive the simple noob question
I have TPM data of ~50k genes (rows) across ~1k cell lines (columns). In R, I would like to output an "intermediate expression" gene list for each cell line, like:
>head(finalExpressedGeneList, n=3)
Celltype1 Celltype2 CelltypeN
gene1 gene5 gene3
gene3 gene6 gene6
etc etc etc
I am defining intermediate expression as "gene expression >= median value within each cell line." I have already replaced all 0 values with NA using:
>data[data == 0] <- NA
I then got medians for each column using:
>colMed <- apply(data,2, FUN = median, na.rm = TRUE)
Now I need to somehow filter the rows from each column and copy the associated gene into a new matrix. I started building the code below:
>if (data[,1]>=colMed [1])
{
finalExpressedGeneList <- row.names(data)
}
But I realized that even if I got it working, I would still have to iterate over all of my columns. I'm sure that there is a cleaner way to do this.
EDIT (adding example data)
#create example data
>j = 5
>M <- matrix(NA,j,j)
>M <- sapply(1:j, function(i) `length<-`(1:(j-i+1), j))
>rownames(M) <- c("gene1", "gene2", "gene3", "gene4", "gene5")
>colnames(M) <- c("cellLine1", "cellLine2", "cellLine3", "cellLine4", "cellLine5")
>view(M)
cellLine1 cellLine2 cellLine3 cellLine4 cellLine5
gene1 1 1 1 1 1
gene2 2 2 2 2 NA
gene3 3 3 3 NA NA
gene4 4 4 NA NA NA
gene5 5 NA NA NA NA
I would like to get an output of:
cellLine1 cellLine2 cellLine3 cellLine4 cellLine5
gene3 gene3 gene2 gene2 gene1
gene4 gene4 gene3
gene5
because the median of cellLine1 has three genes greater than or equal to the median of that column (3), cellLine2 has two genes that are greater than or equal to the median of that column (2.5), etc...