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")
