蛋白组

2022-02-23  本文已影响0人  一只小脑斧

rm(list = ls())

setwd("/data3/ff/project/XCL/pro")

##########

library(data.table)

all<-fread("pro.txt",data.table = F)

colnames(all)

###########1,8,15,22

HFDVAT.CDVAT<-all[,c(1:7)]

HFD_S.CD_S<-all[,c(8:14)]

HFDKPC.CDKPC<-all[,c(15:21)]

S.HFDKPC.S.CDKPC<-all[,c(22:28)]

################################测试

library(impute)

library(limma)

library(dplyr)

##################################################################对于非向量的循环,推荐构建list,然后用lapply

#####

##################################过滤一些全为0的行

HFD_S.CD_S

class(HFD_S.CD_S[1,2])

#过滤至少有一个样本不为0

keep<-rowSums(HFD_S.CD_S> 0) > 1   

HFD_S.CD_S <- HFD_S.CD_S[keep,]

data<-list(HFDVAT.CDVAT=HFDVAT.CDVAT,

           HFD_S.CD_S=HFD_S.CD_S,

           HFDKPC.CDKPC=HFDKPC.CDKPC,

           S.HFDKPC.S.CDKPC=S.HFDKPC.S.CDKPC)

#data<-HFDVAT.CDVAT

#data<- HFD_S.CD_S

data<-HFDKPC.CDKPC

data<- S.HFDKPC.S.CDKPC

##################################################################函数体knn.diff

knn.diff <- function(data){

  print(data)

data <- na.omit(data)

#将所有0值替换为NA

data[data == 0] <- NA

####去重基因名

table(duplicated(data$`Gene name`))

#对重复基因名取平均表达量,获得表达矩阵

if(sum(duplicated(data$`Gene name`))>0) #判断是否有重复基因

  data<-avereps(data,ID=data$`Gene name`) %>% as.data.frame

##更改行名

row.names(data)<-data[,1]

gene<-data[,1]#取出基因名

data<-data[,-1]

#########补全

data=as.matrix(data)

#数据补缺

mat=impute.knn(data)

data=mat$data %>% as.data.frame

#转为数值型

data=as.data.frame(lapply(data,as.numeric))

row.names(data)<-gene

#对数据进行矫正

data=normalizeBetweenArrays(as.matrix(data))

#class(data[1,1])

######################################################差异

pFilter=0.05                                                  #p值临界值

logFCfilter=0                                                 #logFC临界值

conNum=3                                                    #sample1组样品数目

treatNum=3                                                   #sample2组样品数目

#读取输入文件

outTab=data.frame()

group=c(rep(1,conNum),rep(2,treatNum))

data=as.matrix(data)

###################################################去掉数据是恆量

#编写函数,返回一行有几个不同值

uniq.num <- function(x){

  y<-length(unique(x[1:3]))+length(unique(x[4:6]))

  return(y)

}

#length () 函数用于获取或设置向量 (列表)或其他对象的长度

#按行运行函数,计算每行的不同值

uniq.num.df <- data.frame(num = apply(data, 1, uniq.num))

#过滤掉uniq.num为1或2的,留下>2的

uniq.num.df.2 <- filter(uniq.num.df, num>2)

#过滤原数据

data <- data[rownames(uniq.num.df.2), ]

#差异分析

for(i in row.names(data)){

  geneName=i

  rt=rbind(expression=data[i,],group=group)

  rt=as.matrix(t(rt))

  tTest<-t.test(expression ~ group, data=rt)

  pvalue=tTest$p.value

  conGeneMeans=mean(data[i,1:conNum])

  treatGeneMeans=mean(data[i,(conNum+1):ncol(data)])

  logFC=log2(treatGeneMeans/conGeneMeans)

  conMed=median(data[i,1:conNum])

  treatMed=median(data[i,(conNum+1):ncol(data)])

  diffMed=treatMed-conMed

  if( ((logFC>0) & (diffMed>0)) | ((logFC<0) & (diffMed<0)) ){ 

    outTab=rbind(outTab,cbind(gene=i,conMean=conGeneMeans,treatMean=treatGeneMeans,logFC=logFC,pValue=pvalue))

  }

}

#table(duplicated(outTab$gene))

#对重复基因名取平均表达量,一模一样

#if(sum(duplicated(outTab$gene))>0) #判断是否有重复基因

  #outTab<-avereps(outTab,ID=outTab$gene) %>% as.data.frame

#改行名

row.names(outTab)<-outTab$gene

outTab<-outTab[,-1]

#将表达值和结果合并

results<-merge(data,outTab,by="row.names",all.x=TRUE)

return(results)

}

HFDVAT.CDVAT.results<-results

HFD_S.CD_S.results<-results

HFDKPC.CDKPC.results<-results

S.HFDKPC.S.CDKPC.results<-results

write.csv(HFDVAT.CDVAT.results,"HFDVAT.CDVAT.results.csv")

write.csv(HFD_S.CD_S.results,"HFD_S.CD_S.results.csv")

write.csv(HFDKPC.CDKPC.results,"HFDKPC.CDKPC.results.csv")

write.csv(S.HFDKPC.S.CDKPC.results,"S.HFDKPC.S.CDKPC.results.csv")

###########写函数过滤

###########放入自变量

list<- list(HFDVAT.CDVAT.results,HFD_S.CD_S.results,HFDKPC.CDKPC.results,S.HFDKPC.S.CDKPC.results)

#############写过滤函数

filler <- function(x){

  x<-na.omit(x)

  x<-x[(as.numeric(as.vector(x$logFC))>0.1 & as.numeric(as.vector(x$pValue))<0.05),]

  y<-x$Row.names

  return(y)

}

#####应用函数

results.list<- lapply(list,filler)

####取交集

a<-intersect(results.list[[1]],intersect(results.list[[2]],results.list[[3]]))

b<-intersect(results.list[[1]],intersect(results.list[[2]],results.list[[4]]))

上一篇下一篇

猜你喜欢

热点阅读