I am working with the results of a pathway analysis experiment. I have a dataframe, rows are pathways and and columns are samples. For each sample I did RNAseq, and performed GSEA on the results. I then pulled out each pathway from GSEA results (hallmark) from the positive and negative correlation and their associated p-val. I'd like to make a heatmap of this with significant positive and significant negative on either ends and all the genes in the middle are not all that significant.
So here is what the data looks like:
NAME signed-p-val IL2_STAT5_SIGNALING -0.0000 INTERFERON_ALPHA_RESPONSE -0.0055 ALLOGRAFT_REJECTION -0.0070 ESTROGEN_RESPONSE_EARLY -0.0103 MYOGENESIS -0.0109 ANGIOGENESIS -0.0203 APOPTOSIS -0.0422 # I removed some but each list has the same length # all 50 pathways from hallmark gene set APICAL_JUNCTION -0.0428 WNT_BETA_CATENIN_SIGNALING 0.28242677 PROTEIN_SECRETION 0.28635347 HYPOXIA 0.61358315 UV_RESPONSE_UP 0.9225513 CHOLESTEROL_HOMEOSTASIS 0.92826086 TGF_BETA_SIGNALING 0.92060083 DNA_REPAIR 1
That is just a subset of the table, and I have three one for each condition. I did a signed p-value by setting the p-value for the negative enrichment pathways to negative. My issue now is if I sort the dataframe before heatmapping I get all the largely negative p-values at the top and all the largely positive p-values at the bottom. I tried using negative 0 ( -0.000 ) but it didn't work in R (as it does in python).
So I'd like to sort this thing like: -0 -> -1:1 -> 0
Here is the code I have so far. I am really an R novice, but I am guessing I am looking for a way to specify a sort function similar to how you can specify in python by defining the
__cmp__ for a class etc etc.
library(pheatmap) library(RColorBrewer) sample1 = read.table("sample1.tsv", header=T, row.names=1, sep="\t") sample2 = read.table("sample2.tsv", header=T, row.names=1, sep="\t") sample3 = read.table("sample3.tsv", header=T, row.names=1, sep="\t") merged <- merge(sample1, sample2, all=T, by="row.names") rownames(merged) <- merged$Row.names merged$Row.names <- NULL merged <- merge(merged, sample3, all=T, by="row.names") rownames(merged) <- merged$Row.names merged$Row.names <- NULL merged[is.na(merged)] <- 1 colnames(merged) <- c("sample1", "sample2", "sample3") merged <- merged[order(rowSums(merged)),] color <- colorRampPalette(rev(brewer.pal(9, "RdBu")))(100) pheatmap(merged, cluster_rows=F, cluster_cols=F, color = color)