Entering edit mode
2.4 years ago
synat.keam
▴
100
Hi All,
hope you are well. been trying to arrange order of row in decreasing order, but did not work. Basically, I like to have row with high expression at top and then arrange all row in decreasing order based on their relative expression. I worked previously, but did not work this time. Tried to solve it, but could not fix it. these are fake dataset. have a good day!
library("readxl")
# xls files
cibersort <- read_excel("Cibersort_timecourse_raw.xlsx")
## Convert each column to percentage ================================
## step 1 is to write a function ================
## source https://stackoverflow.com/questions/30457951/convert-columns-i-to-j-to-percentage
myfun <- function(x) {
if(is.numeric(x)){
ifelse(is.na(x), x, paste0(round(x*100L, 1)))
} else x
}
## Apply mutate each ===========================================
Cibersort_percent<- cibersort %>% mutate_each(funs(myfun))
## Perform hierachical clustering =========================
dim(Cibersort_percent)
head(Cibersort_percent)
## Transpose =================================
Cibersort.Tran<- as.data.frame(t(Cibersort_percent[-1]))
names(Cibersort.Tran)= Cibersort_percent$Mixture
rownames(Cibersort.Tran)=names(Cibersort_percent[-1])
## load phenotype data =================
Pheno <- read_excel("Phenotype.xlsx")
## Selection relevant ones =================
phenotype<- Pheno[1:2]
## Scale the numeric variables ==================================
Cibersort.numeric<- Cibersort.Tran %>% mutate_if(is.character,as.numeric)
## Feature scaling ==============================
df.scale<- scale(Cibersort.numeric)
## math row/column of datframe and phenotypic data
Group_df = data.frame("Group" = phenotype$Group)
rownames(Group_df) = colnames(Cibersort.Tran) # name matching
# plot pheatmap ===========================
library(pheatmap)
pheatmap(df.scale, cluster_cols = T, annotation = select(Group_df, Group))
It is difficult to answer without data, but you could convert
Group_df$Group
to factor and set the levels in the order you want without clustering. Something likeGroup_df$Group=factor(Group_df$Group,levels=c("M0.Macrophage","M1.Macrophage", ...))
and then remove the clustering of rows withcluster_rows=F
:pheatmap(df.scale, cluster_cols = T, cluster_rows=F, annotation = select(Group_df, Group))
Dear Basti,
Thank you! I will experiment your code chunk. many thanks,
sk,