BiocManager::install("biomaRt") library(biomaRt) setwd("D:\\X") getwd() ma <-read.table("X_CountMatrix.txt", header = TRUE,row.names=NULL, sep = "\t") head(ma) names<- as.character(ma$ensembl_gene_id) rownames(ma) <- names ma <- ma[,-1] ensembl <- useMart("ensembl") ensembl = useDataset("hsapiens_gene_ensembl",mart=ensembl) test <- getBM(attributes=c('ensembl_gene_id', 'start_position', 'end_position','ensembl_transcript_id', 'transcript_length'),mart = ensembl) head(test) test <- test[order(test$ensembl_gene_id,test$transcript_length,decreasing = T),] g <- test[!duplicated(test$ensembl_gene_id),] g <- g[,c(1,5)] head(g) dim(g) summary(g) row.names(ma) ng=intersect(rownames(ma),g$ensembl_gene_id) length(ng) lengths=g[match(ng,g$ensembl_gene_id),2] names(lengths) <- g[match(ng,g$ensembl_gene_id),1] head(lengths) ma <- ma[names(lengths),] total_count <- colSums(ma) head(total_count,12) ma_fpkm <- t(do.call( rbind, lapply(1:length(total_count), function(i){ 10^9*ma[,i]/lengths/total_count[i] }) )) ma_fpkm[1:4,1:4] write.csv(ma_fpkm, file = "X_fpkm.csv")